LeetCode162-寻找峰值
二分找索引,对于mid,如果处于上坡,则答案在右边,如果处于下坡,答案在左边,如果处于低谷,答案任意,如果处于峰顶,即为答案。
注意特判0和nums.szie()-1两个位置
class Solution {
public:
int findPeakElement(vector<int>& nums) {
int l = 0, r = nums.size()-1, mid;
int res;
while(l <= r) {
mid = (l + r) / 2;
// cout << nums[mid] << endl;
if((mid == 0 || nums[mid] > nums[mid - 1]) && (mid == nums.size() - 1 || nums[mid] > nums[mid + 1])) {
res = mid;
break;
}
else if((mid == 0 || nums[mid-1] < nums[mid]) && (mid < nums.size() - 1 && nums[mid] < nums[mid+1])) l = mid + 1;
else if((mid > 0 && nums[mid-1] > nums[mid]) && (mid == nums.size() - 1 || nums[mid] > nums[mid+1])) r = mid - 1;
else l = mid + 1;
}
return res;
}
};