81. 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 return false.
Example 1:
Input: nums = [2,5,6,0,0,1,2], target = 0
Output: true
Example 2:
Input: nums = [2,5,6,0,0,1,2], target = 3
Output: false
Follow 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?
class Solution {
public:
bool search(vector<int>& nums, int target) {
int L = 0, R = nums.size()-1, mid = 0;
while(L <= R) {
mid = L + (R-L)/2;
if(nums[mid] == target)
return true;
if(nums[L] < nums[mid]) {
if(nums[L]<=target && target<nums[mid])
R = mid - 1;
else
L = mid + 1;
}
else if(nums[L] == nums[mid])
L += 1;
else {
if(nums[mid]<target && target<=nums[R])
L = mid + 1;
else
R = mid - 1;
}
}
return false;
}
};
这使得时间复杂度最坏情况为O(n),因为当nums[L]==nums[R]==nums[mid]时,没法二分数组,只能线性地缩小数组范围,这在最坏情况下将是O(n)的。例如,序列[1,1,1,1,1,1]中找2,需要判断5次。