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