# Search in Rotated Sorted Array

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).

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.

Time Complexity
O(logn)
Space Complexity
O(1)

## 思路

If target == nums[mid]; return mid;
If target nums[mid] < nums[right], mid to right is sorted, so we just need to know if target is between mid to right.
If target nums[mid] > nums[right], left to mid is sorted, so we just need to know if target is between left to mid.

## 代码

``````public int search(int[] nums, int target) {
if(nums == null || nums.length == 0){
return -1;
}
int start = 0, end = nums.length - 1;
while(start + 1 < end){
int mid = start + (end - start)/2;
if(nums[mid] == target){
return mid;
}
if(nums[mid] < nums[end]){    //right part is sorted
if(nums[mid] < target && target <= nums[end]){
start = mid + 1;
}else{
end = mid - 1;
}
}else if(nums[mid] > nums[end]){   //left part is sorted
if(nums[start] <= target && target < nums[mid]){
end = mid - 1;
}else{
start = mid + 1;
}
}else{
start++;
}
}
if(nums[start] == target){
return start;
}
if(nums[end] == target){
return end;
}
return -1;
}
``````