寻找峰值
题目:
描述
给定一个整数数组(size为n),其具有以下特点:
相邻位置的数字是不同的
A[0] < A[1] 并且 A[n - 2] > A[n - 1]
假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。
数组保证至少存在一个峰
如果数组存在多个峰,返回其中任意一个就行
数组至少包含 3 个数
样例
样例 1:
输入:
A = [1, 2, 1, 3, 4, 5, 7, 6]
输出:
1
解释:
返回任意一个峰顶元素的下标,6也同样正确。
样例 2:
输入:
A = [1,2,3,4,1]
输出:
3
解题思路:首先题目确定肯定有解,因为A[0] < A[1] 并且 A[n - 2] > A[n - 1] 所以搜索范围是[1, n - 2]
public class Solution {
/**
* @param A: An integers array.
* @return: return any of peek positions.
*/
public int findPeak(int[] nums) {
// write your code here
int len = nums.length;
int l = 1, r = len - 2;
while(l + 1 < r) {
int mid = l + (r - l) / 2;
if(nums[mid] < nums[mid - 1]) {
r = mid;
} else if(nums[mid] < nums[mid + 1]) {
l = mid;
} else {
return mid;
}
}
if(nums[l] < nums[r]) {
return r;
} else {
return l;
}
}
}