如果nums[mid]比右边大,是下坡,那么右边不一定会出现波峰
如果nums[mid]比右边大,是上坡,那么右边一定会出现波峰
那么测试用例中的 [2,4,1,2,7,8,4] 为什么会无法通过呢?
4和8都是峰值元素,返回4的索引1或者8的索引5都可以,按照以下代码返回5应该是没有问题的,但是判题可能有问题,所以提交没问题的;
int findPeakElement(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while(left < right){
int mid = (right + left) / 2;
if(nums[mid] > nums[mid + 1]) //大于右侧元素,不一定有波峰
right = mid;
else // 小于右侧元素,一定有波峰
left = mid + 1;
}
return left;
}

京公网安备 11010502036488号