Search in Rotated Sorted Array II(lintcode 63)
Description
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.
Example
Given [1, 1, 0, 1, 1, 1] and target = 0, return true. Given [1, 1, 1, 1, 1, 1] and target = 0, return false.
Interface
public class Solution {
/**
* param A : an integer ratated sorted array and duplicates are allowed
* param target : an integer to be search
* return : a boolean
*/
public boolean search(int[] A, int target) {
// write your code here
}
}
Solution
public class Solution {
/**
* param A : an integer ratated sorted array and duplicates are allowed
* param target : an integer to be search
* return : a boolean
*/
public boolean search(int[] A, int target) {
// write your code here
if (A == null || A.length == 0) {
return false;
}
int start = 0;
int end = A.length - 1;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (A[mid] == target) {
return true;
} else if (A[mid] == A[end]) {
--end;
} else if (A[mid] < A[end]) {
if (A[mid] <= target && target <= A[end]) {
start = mid;
} else {
end = mid;
}
} else {
if (A[start] <= target && target <= A[mid]) {
end = mid;
} else {
start = mid;
}
}
}
if (A[start] == target || A[end] == target) {
return true;
}
return false;
}
}