假设:
上坡,一直往右边找,一定会找到一个 递减的数, 因为 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

京公网安备 11010502036488号