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