Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4
5 6 7 0 1 2
).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
陷阱:1 3 1 1 1 ; 3 1
public class Solution {
public boolean search(int[] nums, int target) {
int n = nums.length;
if(n<=0) return false;
int start = 0, end = n-1;
while(start<=end){
int mid = start + (end-start)/2;
if(nums[mid]==target) return true;
if(nums[mid]>nums[end]){
if(nums[mid]>target && nums[start] <= target) end = mid;
else start = mid + 1;
}else if(nums[mid] < nums[end]){
if(nums[mid]<target && nums[end] >= target) start = mid + 1;
else end = mid;
}else{
end--;
}
}
return nums[start]==target? true:false;
}
}
总结:注意转折点