Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
分析:参考https://github.com/soulmachine/leetcode允许重复元素,如果A[m]>=A[l], 那么[l,m] 为递增序列的假设就不能成立了,比
如[1,3,1,1,1]。
如果A[m]>=A[l] 不能确定递增,那就把它拆分成两个条件:
• 若A[m]>A[l],则区间[l,m] 一定递增
• 若A[m]==A[l] 确定不了,那就l++,往下看一步即可。
class Solution {
public:
bool search(vector
& nums, int target) {
return partion(nums,target,0,nums.size()-1);
}
private:
bool partion(vector
& nums, int target,int start ,int end){
while(start<=end){
int mid=start+(end-start)/2;
if(nums[mid]==target){
return true;
}
else if(nums[mid]
nums[start]){
if(nums[mid]>target && target>=nums[start])
end=mid-1;
else
start=mid+1;
}
else
start++;
}
return false;
}
};