题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
如果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; }