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?
解法
如果mid指向的值小于end指向的值,则右边是有序的,则比较target和mid指向的值的大小及target与end指向的值得大小来确定接下来在右边搜索还是在左边搜索。如果左边有序则同理,如果mid指向的值等于end指向的值,则令end减一。
public boolean search(int[] nums, int target) {
if(nums==null||nums.length==0)
return false;
int start=0,end=nums.length-1;
while(start<=end)
{
int mid=(start+end)/2;
if(nums[mid]==target)
return true;
else if(nums[mid]<nums[end])
{
if(nums[mid]<target&&nums[end]>=target)
start=mid+1;
else
end=mid-1;
}
else if(nums[mid]>nums[end])
{
if(nums[mid]>target&&nums[start]<=target)
end=mid-1;
else
start=mid+1;
}
else
end--;
}
return false;
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Search in Rotated Sorted Array II.
Memory Usage: 36 MB, less than 82.10% of Java online submissions for Search in Rotated Sorted Array II.