Hi 大家,这道题是lintcode上的find peak element的题,不是leecode的那道,

这两道题是有区别的,这道题的题目中说明了:只有左右两侧的数都小于某个元素,这种才是峰值,

而leetcode的题,是只要找到个最大值就行,可以是[1,2]这种。

There is an integer array which has the following features:

  • The numbers in adjacent positions are different.
  • A[0] < A[1] && A[A.length - 2] > A[A.length - 1].

We define a position P is a peek if:

A[P] > A[P-1] && A[P] > A[P+1]

Find a peak element in this array. Return the index of the peak.

Example

Given [1, 2, 1, 3, 4, 5, 7, 6]

Return index 1 (which is number 2) or 6 (which is number 7)

分析:

你给出一个整数数组(size为n),其具有以下特点:

  • 相邻位置的数字是不同的
  • A[0] < A[1] 并且 A[n - 2] > A[n - 1]

假定P是峰值的位置则满足A[P] > A[P-1]A[P] > A[P+1],返回数组中任意一个峰值的位置。

给出数组[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即数值 2 所在位置, 或者6, 即数值 7 所在位置.

要找峰值,要分析每个点有哪几种情况,每个只有四种情况,

(1)在某个峰值

(2)在某个上升区间

(3)在某个下降区间

(4)在一个谷底,比左右两边的元素都小。

首先我们可以确定的是,第一个元素和最后一个元素不可能构成一个峰值,因为峰值要求某个值要同时大于左右两侧的数。

限定了start和end的范围,这道题我们用二分法解决。

第三个条件选择里 else{ start  = mid} 也可以是 end = mid。

class Solution {
/**
* @param A: An integers array.
* @return: return any of peek positions.
*/
public int findPeak(int[] A) {
int start = 1, end = A.length-2; // 1.答案在之间,2.不会出界
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] < A[mid - 1]) {
end = mid;
} else if(A[mid] < A[mid + 1]) {
start = mid;
} else {
start = mid;
}
}
if(A[start] < A[end]) {
return end;
} else {
return start;
}
}
}

最新文章

  1. 用Unity模仿CSGO里的火焰效果
  2. QQ好友列表向左滑动出现置顶、删除--第三方开源--SwipeMenuListView
  3. 第一个CUDA程序
  4. OSS研究
  5. asp.net中bin目录下的 dll.refresh文件
  6. 对原生js的一些小尝试
  7. 经典排序算法 - 高速排序Quick sort
  8. vs2012 网站无法使用自定义服务器的解决方法
  9. My &quot;Top 5 R Functions&quot;(转)
  10. WindowUtils【窗口工具类】
  11. lambda expressions
  12. 2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践
  13. [UWP]使用Popup构建UWP Picker
  14. PYTHON-基本数据类型-元祖类型,字典类型,集合类型-练习
  15. MySQL免安装配置(亲测过,请放心借鉴)
  16. Tkernel Package NCollection哈希基础的类
  17. []如何在Windows 10中更改文件夹背景颜色
  18. javascript 获取视口的高度和宽度
  19. 学习MongoDB 三: MongoDB无法启动的解决方法
  20. 一款基于jquery固定于顶部的导航

热门文章

  1. 【转】CSS3的REM设置字体大小
  2. 自然语言16_Chunking with NLTK
  3. 20145212 实验三《敏捷开发与XP实践》
  4. Java I/O流体系
  5. C++学习之Pair
  6. DllMaps
  7. Jquerymobile随笔
  8. 网络广告术语CPC、CPM和CTR的含义和关系
  9. wampserver 绑定域名 外部可以正常访问
  10. HBase命令(二) -- 表操作