题解 | #寻找峰值#

寻找峰值

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;
}

全部评论

相关推荐

联通 技术人员 总包不低于12
点赞 评论 收藏
分享
去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务