Search in Rotated Sorted Array II
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.
Analysis
- 多加一种nums[mid]==nums[low]的情况。 这种情况下无法判断左边还是右边是sorted的。这时把low++,一步一步靠近。
Code
public class Solution {
public boolean search(int[] nums, int target) {
if (nums==null || nums.length==0) {return false;}
int low = 0;
int high = nums.length-1;
while (low +1 < high){
int mid = low + (high-low)/2;
if (target == nums[mid]) {return true;}
if (nums[mid]>nums[low]){
if (target > nums[mid]) {low = mid;}
else {
if (target == nums[low]) {return true;}
else if (target > nums[low]) {high = mid;}
else {low = mid;}
}
}
else if (nums[mid] < nums[low]){
if (target < nums[mid]) {high = mid;}
else {
if (target == nums[high]) {return true;}
else if (target >nums[high]) {high = mid;}
else {low = mid;}
}
}
else {
low++;
}
}
if (nums[low]==target || nums[high]==target) {return true;}
return false;
}
}
Reference
Leetcode