81. Search in Rotated Sorted Array II
Medium
630301FavoriteShare
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?
解题思路:
把递增的前半段取出来,加到数组后边。记录前半段结束的下一个位start。
用二分法查找target。
class Solution {
public:
bool search(vector<int>& nums, int target) {
int start=1;
if(nums.size()==0)return false;
if(nums.size()==1&&nums[0]==target)return true;
if(nums.size()==1&&nums[0]!=target)return false;
vector<int> temp;
temp.push_back(nums[0]);
while(start<nums.size()&&nums[start]>=nums[start-1])
{
temp.push_back(nums[start]);
start++;
}
for(int i=0;i<temp.size();i++)
{
nums.push_back(temp[i]);
}
int L=start;
int R=nums.size()-1;
int mid;
while(L<=R)
{
mid=L+(R-L)/2;
if(nums[mid]==target)return true;
else if(nums[mid]<target)L=mid+1;
else if(nums[mid]>target)R=mid-1;
}
return false;
}
};