假设:
上坡,一直往右边找,一定会找到一个 递减的数, 因为 nums[n] = 负无穷
下坡也是一样
上坡有2种情况
要么一直递增知道 nums[n], 要么 当 i< n的时候,就找到1个 数比前面的数要小。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int findPeakElement(vector<int> &nums) { // write code here int n = nums.size(); if (n == 0) return -1; if (n == 1) return 0; int l = 0, r = n - 1; while (l < r) { int m = l + (r - l) / 2; if (nums[m] < nums[m + 1]) { // 上坡,一直往右边找,一定会找到一个 递减的数, 因为 nums[n] = 负无穷 l = m + 1; } else { r = m; } } return l; } int checkx(vector<int> &nums) { int n = nums.size(); if (n <= 0) return -1; if (n == 1) return 0; int l = INT_MIN, r = INT_MIN; if (nums[0] >= l && nums[0] >= nums[1]) return 0; if (nums[n - 1] >= r && nums[n - 2] <= nums[n - 1]) return n - 1; return -1; } }; #ifdef debug int main() { cout << __FILE__ << endl; Solution k; vector<int> nums{1, 2, 3, 4, 5, 6, 7, 8, 9}; println(k.findPeakElement(nums)); return 0; } #endif