旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)

二分思想
这里注意当rotateArray[mid] == rotateArray[right]的时候
我们无法直接判断 因为是一个非降序数组 当中间和尾部出现相等的情况 不确定最小到底在那边区域 比如 [ 0 , 1 , 1, 1, 1] 反转 成 [ 1, 0, 1, 1, 1]
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int left = 0;
int right = rotateArray.size()-1;
while(left < right){
int mid = (left + right) / 2;
if(rotateArray[mid] > rotateArray[right])
left = mid + 1;
else if(rotateArray[mid] == rotateArray[right])
right--;
else
right = mid;
}
return rotateArray[left];
}
};
该文章介绍了一种使用二分查找算法解决旋转非降序数组中找到最小数字的方法。在处理rotateArray[mid]==rotateArray[right]的特殊情况时,需要调整搜索区间来避免错误判断。
448

被折叠的 条评论
为什么被折叠?



