题目:
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,1,1,1,2,1]public class Solution {
public boolean search(int[] nums, int target) {
int mid =0;
int start =0;
int end = nums.length-1;
boolean ret = false;
while(start<=end){
mid =(start+end)/2;
if(target==nums[mid]){
ret = true;
break;
}
if(start==end) break;
if(nums[mid]>nums[end]){
end = target>=nums[start]&&target<nums[mid]? mid-1:end;
start = target>=nums[start]&&target<nums[mid]?start:mid+1;
}
else if(nums[mid]<nums[start]){
start = target<=nums[end]&&target>nums[mid]? mid+1:start;
end = target<=nums[end]&&target>nums[mid]?end:mid-1;
}else if(nums[mid]==nums[end]&&nums[mid]==nums[start]){
start++;
end--;
} else{
start = target<=nums[mid]? start:mid+1;
end = target<=nums[mid]? mid-1:end;
}
}
return ret;
}
}
参考: