problem:https://leetcode.com/problems/find-peak-element/
根据下标二分搜索。每次检查mid左右两个数和mid的关系,决定如何进行下一步。
class Solution { public: int findPeakElement(vector<int>& nums) { int n = nums.size(); int low = 0; int high = n - 1; while(low <= high) { // cout << low << " " << high << endl; int mid = (low + high) / 2; int left = mid > 0 ? nums[mid - 1] : INT_MIN; int right = mid < n - 1 ? nums[mid + 1] : INT_MIN; if(left <= nums[mid] && right <= nums[mid]) { return mid; } else if(left <= nums[mid] && nums[mid] <= right) { low = mid + 1; } else if(left >= nums[mid] && nums[mid] >= right) { high = mid - 1; } else { high = mid - 1; } } return 0; } };