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.
Your algorithm’s runtime complexity must be in the order of O(log n).
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0 Output: 4 Example 2:
Input: nums = [4,5,6,7,0,1,2], target = 3 Output: -1
在 旋转数组中查找数字,数字是唯一的
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length -1;
if(right < 0) {
return -1;
}
int mid = right / 2;
while(nums[mid] != target) {
if(nums[mid] > nums[right]) { // 左边是有序的
if(nums[mid] < target || nums[left] > target) {
left = mid + 1;
} else{
right = mid -1;
}
} else if(nums[left] > nums[mid]){ //右边是有序的
if(nums[mid] > target || nums[right] < target) {
right = mid -1;
} else {
left = mid + 1;
}
} else { // 整体是有序的
if(nums[mid] < target) {
left = mid + 1;
} else {
right = mid -1;
}
}
if(left > right) {
return -1;
}
int temp = (right -left) / 2;
mid = left + temp;
}
return mid;
}
}
442

被折叠的 条评论
为什么被折叠?



