题解 | #寻找峰值#

寻找峰值

https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76

2022.0806算法第8道寻找峰值
寻找峰值采用二分法这个思想还是比较简单的,就是mid和相邻元素进行比较,确定两者的走向,将区间修正为可能存在峰值的区间。
if(nums[mid]> nums[mid+1])
    r=mid;
else 
    l=mid+1;               
此时的r和l的取值也是很关键的。
做题时忽略了第三个条件,相邻元素不能相等的限制,因此考虑了相邻元素相等的情况
修改代码如下:
 while(nums[mid]-nums[mid+i]==0)
     i++;
 if(nums[mid]> nums[mid+i])
     r=mid;
 else if(nums[mid]< nums[mid+i])
     l=mid+i;               
这样确保找到右侧不相等的元素,对于[1,4,2,2,2,1,1]输出正确。
但是对于[1,2,3,1,1,1,1]这种右侧全部都相等的情况,算法还是会出问题。
如果没有相邻元素不相等的条件,需要考虑的情况就太多了,主要还是考察二分查找的问题,也不能想的太多。


#算法题#
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务