LeetCode 81. 搜索旋转排序数组Ⅱ
原题链接
简单
作者:
大明湖的鱼
,
2021-04-07 14:40:06
,
所有人可见
,
阅读 382
就是在旋转后的数组里用$O(logn)$的时间复杂度做,最坏时间复杂度其实是$O(n)$
class Solution {
public:
bool search(vector<int>& nums, int target) {
int l = 0,r = nums.size()-1;
while(l <= r){
while(l < r && nums[l] == nums[l+1]) l++;
while(l < r && nums[r] == nums[r-1]) r--;
int mid = l + (r-l) /2;//防止溢出
if(nums[mid]==target) return true;
if(nums[mid]>=nums[l]){
if(target<=nums[mid] && target>=nums[l]) r= mid-1;
else l = mid+1;
}
else {
if(target>=nums[mid] && target<=nums[r]) l=mid+1;//这里的target大于还是大于等于似乎并不影响最终结果,仔细体会。
else r= mid-1;
}
}
return false;
}
};