题解 | #寻找峰值#(二分查找)
寻找峰值
http://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
分析: 最简单的是循环遍历O(n)
二分查找,O(log2n)
最左边和最右边为无穷小,当任意一个位置i上的值小于相邻i+1时,则左边必然存在峰值。
当任意一个位置i上的值大于相邻i+1时,右边必存在峰值。
class Solution {
public:
// 左右边为无穷小,所以 当前位 大于临近坐标
int findPeakElement(vector<int>& nums) { // 索引logn 二分查找
int len = nums.size();
int low=0, high=len-1;
while(low < high){
int mid = low + high >> 1;
nums[mid] < nums[mid+1]?low=mid+1:high=mid;
}
return low;
}
};