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.
题解:数组是一个旋转有序的数组,查找target的位置。采用的二分查找。
先求出nums[mid],用nums[mid]与nums[left]或者nums[right]作比较,我采用与右边作比较(随意取一边),如果nums[mid]<nums[right],说明mid--->right 是递增的,否则是递减的。再次判断target在nums[left]~nums[mid]与nums[mid]~nums[right]这两个区间的哪一个。nums[mid]>nums[right]情况,同理。
code:
public class Solution {
public int search(int[] nums, int target) {
if(nums == null || nums.length == 0)
return -1;
int mid=0,left = 0, right = nums.length-1;
while(left<=right){
mid = left+(right-left)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>nums[right]){ //left
if(nums[left]<= target && target<nums[mid]){
right = mid-1;
}else{
left = mid+1;
}
}else{ //right
if(nums[mid]<target && target <=nums[right]){
left = mid+1;
}else{
right = mid-1;
}
}
}
return -1;
}
}
参考: http://blog.csdn.net/maqingli87/article/details/8009186