题解 | #寻找峰值#

寻找峰值

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]这种右侧全部都相等的情况,算法还是会出问题。
如果没有相邻元素不相等的条件,需要考虑的情况就太多了,主要还是考察二分查找的问题,也不能想的太多。


#算法题#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
09-29 17:44
已编辑
蔚来_测(准入职员工)
//鲨鱼辣椒:见不了了我实习了四个月上周再投筛选了一天就给我挂了
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务