33 & 81. Search in Rotated Sorted Array I & II
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1class Solution {
public int search(int[] nums, int target) {
if (nums == null || nums.length == 0) return -1;
int l = 0, r = nums.length - 1;
while (l + 1 < r) {
int mid = l + (r - l) / 2;
if (nums[mid] == target) return mid;
if (nums[mid] < nums[r]) { // 反转的index在mid之前,mid之后的都是递增的
// target在mid和r之间
if (target > nums[mid] && target <= nums[r]) l = mid;
else r = mid;
} else { // 反转的index在mid之后,mid之前的都是递增的
//target在mid和l之间
if (target >= nums[l] && target < nums[mid]) r = mid;
else l = mid;
}
}
if (nums[l] == target) return l;
else if (nums[r] == target) return r;
else return -1;
}Last updated