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.
public int search(int[] nums, int target) {
if (nums.length == 0)
return -1;
int minIdx = findMinIdx(nums); //先找出最小值的索引
if (target == nums[minIdx])
return minIdx;
int m = nums.length;
int start = (target > nums[m - 1]) ? 0 : minIdx;
int end = (target > nums[m - 1]) ? minIdx - 1 : m - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target)
return mid;
else if (target > nums[mid])
start = mid + 1;
else
end = mid - 1;
}
return -1;
}
public int findMinIdx(int[] nums) {
int start = 0, end = nums.length - 1;
while (start < end) {
int mid = start + (end - start) / 2;
if (nums[mid] > nums[end])
start = mid + 1;
else
end = mid;
}
return start;
}
标签:Search,end,nums,33,mid,return,start,int,Sorted From: https://www.cnblogs.com/MarkLeeBYR/p/16862532.html