Problem Description:
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 returnfalse
.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?
Analysis:
这道题的思路和33. Search in Rotated Sorted Array是一样的,唯一需要注意的就是边界问题,也就是当中间值与边界值是相同的时候。代码如下:
Code:
class Solution {
public boolean search(int[] nums, int target) {
int i = 0, j = nums.length - 1;
while(i <= j) {
int mid = i + (j - i)/2;
if(nums[mid] == target)
return true;
if(nums[mid] == nums[i]) {
i++;
} else if(nums[mid] == nums[j]) {
j--;
} else if(nums[mid] > nums[j]) {
if(nums[mid] > target && nums[i] <= target) {
j = mid - 1;
} else {
i = mid + 1;
}
} else {
if(nums[mid] < target && nums[j] >= target) {
i = mid + 1;
} else {
j = mid - 1;
}
}
}
return false;
}
}