Description:
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?
code:
解析:这道题查找旋转数组的目标值,首先想到的是二分法来查找。然后就是根据不同情况,查找target在左边还是右边。这个很重要。
public int search(int[] nums, int target) {
if(nums.length==0)return -1;
int i=0;
int j=nums.length-1;
while(i<j){
int mid = (i+j)/2;
if(nums[mid]==target)return mid;
if(nums[i]<=nums[mid]){
if(nums[mid]>target&&target>=nums[i]) {
j = mid - 1;
}
else {
i = mid + 1;
}
}
else{
if(nums[j]>=target&&target>nums[mid]) {
i = mid + 1;
}
else {
j = mid - 1;
}
}
}
return nums[i]==target?i:-1;
}