峰值寻找(1维、2维)
一维版本
定义:位置2是峰值当且仅当a<=b && b>=c
。位置9是峰值当i>=h
表1 a-i 是数组的元素
index | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
value | a | b | c | d | e | f | g | h | i |
方案一: 直接从左到右
算法复杂度O(n)
方案二:折半查找
algorithm: findPeak(List a)
int mid = a.size()/2
if a.get(mid) < a.get(mid-1) ,then findPeak(a.subList(0,mid))
if a.get(mid) < a.get(mid+1) ,then findPeak(a.subList(mid+1,a.size())
else return a.get(mid)
算法复杂度
二维版本
定义:a是峰值如果*a ≥ b, a ≥ d, a ≥ c, a ≥ e
.
java
algorithm: findPeak(int[][] arr)
1. 找到列的中间j=m/2
2. 找到列j的最大值target,位置为(i,j)
3. if(i,j-1) > (i,j),then 往左边找峰值。
if(i,j+1) > (i,j),then 往右边找峰值。
else return target
算法复杂度