这是上一道题目的升级题
上一道题目中的数组是没有重复的,现在是有重复的,那么会带来什么变化呢?
还是可以二分,但是有一种情况是当nums[mid]
和nums[left]
, num[right]
都相等的时候,没有办法判断是向左还是向右。那么这个时候,就把r--
于是如果是数字都一样的数组,那么就会以O(N)的效率执行。LeetCode并没有卡O(n) 所以就将就着过吧
c++
class Solution {
public:
int findMin(vector<int>& nums) {
int l=0;
int r=nums.size()-1;
while(l<r)
{
int mid = (l+r)/2;
if(nums[mid]<nums[r])
{
r=mid;
continue;
}
if(nums[mid]>nums[r])
{
if(nums[mid]==nums[l])
l=mid+1;
else
l=mid;
continue;
}
else if(nums[mid]==nums[r])
{
r--;
continue;
}
}
return nums[l];
}
};