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钳住里面,判断是否在里面,否则搜另外一边;因为array是rotated,所以,只能是两边要么一边升序,把target放在升序的序列里面进行判断,如果不在,选另外一边;
class Solution {
public int search(int[] nums, int target) {
int start = 0; int end = nums.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(nums[mid] > nums[end]) { // first half sorted;
if(nums[start] <= target && target <= nums[mid]) {
end = mid;
} else {
start = mid;
}
} else {
// nums[mid] < nums[end], second half sorted;
if(nums[mid] <= target && target <= nums[end]) {
start = mid;
} else {
end = mid;
}
}
}
if(nums[start] == target) {
return start;
}
if(nums[end] == target) {
return end;
}
return -1;
}
}