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.
思路:binary search。跟Find Minimum number in the Array II 一样,去掉一个相同的元素,搜索范围继续缩小就可以了。
class Solution {
public boolean search(int[] nums, int target) {
if(nums == null || nums.length == 0) {
return false;
}
int start = 0; int end = nums.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(nums[mid] == target) {
return true;
} else if(nums[start] == nums[mid]) {
start++;
} else if(nums[start] < nums[mid]) {
if(nums[start] <= target && target < nums[mid]) {
end = mid;
} else {
start = mid;
}
} else {
// nums[start] > nums[mid];
// mid...end is sorted;
if(nums[mid] < target && target <= nums[end]) {
start = mid;
} else {
end = mid;
}
}
}
if(nums[start] == target || nums[end] == target) {
return true;
}
return false;
}
}