Search in Rotated Sorted Array II
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
Solution:
public boolean search(int[] nums, int target) {
int length = nums.length;
if (length == 0) {
return false;
}
int index = 0;
while (index < length - 1 && nums[index] <= nums[index + 1]) {
index++;
}
boolean result = false;
if (index == length - 1) {
result = search(nums, 0, length - 1, target);
} else if (index == 0) {
result = nums[0] == target ? true : search(nums, 1, length - 1, target);
} else if (nums[index] < target || nums[index + 1] > target) {
} else if (nums[0] <= target) {
result = search(nums, 0, index, target);
} else {
result = search(nums, index + 1, length - 1, target);
}
return result;
}
private boolean search(int[] nums, int begin, int end, int target) {
if (begin > end) {
return false;
}
int mid = (begin + end) / 2;
if (nums[mid] > target) {
return search(nums, begin, mid - 1, target);
} else if (nums[mid] == target) {
return true;
} else {
return search(nums, mid + 1, end, target);
}
}