你给出一个整数数组(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 所在位置.
挑战
Time complexity O(logN)
分析:既然挑战是说时间复杂度为O(logN),则自然会想到快速查找算法。具体代码如下。
//转自:
class Solution {
public:
/**
* @param A: An integers array.
* @return: return any of peek positions.
*/
int FindPeakNumber(vector<int> A,int first,int last){
int mid;
while(first<last){
mid=(first+last)/2;
if(A[mid]>A[mid+1]&&A[mid]>A[mid-1]){
return mid;
}
else if(A[mid]<A[mid-1])
last=mid-1;
else if(A[mid]<A[mid+1])
first=mid+1;
}
}
int findPeak(vector<int> A) {
// write your code here
return FindPeakNumber(A,1,A.size()-2);
}
};
如有问题请留言。
如有帮助请顶一个,你们的支持是我最大的动力。
文章均可以转载,但请注明文章链接,谢谢。