https://leetcode.com/problems/search-in-rotated-sorted-array-ii/
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e.,
[0,0,1,2,2,5,6]
might become[2,5,6,0,0,1,2]
).You are given a target value to search. If found in the array return
true
, otherwise returnfalse
.Example 1:
Input: nums = [2,5,6,0,0,1,2], target = 0 Output: trueExample 2:
Input: nums = [2,5,6,0,0,1,2], target = 3 Output: falseFollow up:
- This is a follow up problem to Search in Rotated Sorted Array, where
nums
may contain duplicates.- Would this affect the run-time complexity? How and why?
增加了重复元素,导致对边界条件的判断变得复杂了很多,我原本在 33. Search in Rotated Sorted Array 中使用的方法就显得太过粗糙了,导致我花了很长时间都想不明白。
所以参考了这篇博客:https://blog.youkuaiyun.com/linhuanmars/article/details/20588511
他对原理解释的非常清楚,而且以他的思路理解的话就可以相对更自然的推广到这道题的情况下使用
class Solution {
public:
bool search(vector<int>& nums, int target) {
int lo = 0;
int hi = nums.size()-1;
int mid;
while(lo <= hi){
mid = (lo+hi)/2;
if(nums[mid] == target){
return true;
}else if(nums[mid] < nums[hi]){ //右侧有序
if(target > nums[mid] && target <= nums[hi]){
lo = mid + 1;
}else{
hi = mid - 1;
}
}else if(nums[mid] > nums[hi]){ //左侧有序
if(target < nums[mid] && target >= nums[lo]){
hi = mid - 1;
}else{
lo = mid + 1;
}
}else{
--hi;
}
}
return false;
}
};