Suppose a sorted array 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).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
public class Solution {
private int searchAux(int[] nums, int target, int l, int r){
if(1 == r - l){
// more more more
if(nums[l] == target){
return l;
}else{
return -1;
}
}else if(1 > r - l){
return -1;
}else{
int m = (l + r) / 2;
// 0, 4 --> 2
if(nums[m] == target){
return m;
}else if(nums[m] > target){
// abnormal range
if(nums[l] > nums[m]){
return searchAux(nums, target, l, m);
}else if(nums[r-1] < nums[m]){
if(target >= nums[l])
return searchAux(nums, target, l, m);
else
return searchAux(nums, target, m, r);
}else{
return searchAux(nums, target, l, m);
}
}else{
if(nums[l] > nums[m]){
if(target >= nums[l])
return searchAux(nums, target, l, m);
else
return searchAux(nums, target, m, r);
}else if(nums[r-1] < nums[m]){
return searchAux(nums, target, m, r);
}else{
return searchAux(nums, target, m, r);
}
}
}
}
public int search(int[] nums, int target) {
int len = nums.length;
if(0 == len)
return -1;
return searchAux(nums, target, 0, len);
}
}
No comments:
Post a Comment