旋转数组找target值的下标
二分查找,对于一个旋转数组,每次判断mid是否和target相等,相等返回,否则,判断mid当前所处的是哪一个有序数组,然后判断target是否在这个有序数组中,如果是,则在这个有序数组中继续二分,否则,转向另一个有序数组。注意边界条件的判断。
public int search(int[] nums, int target) {
int lo = 0, hi = nums.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (target == nums[mid]) {
return mid;
// 注意只有2个元素的时候会出现相等的情况,如果不加等于判断,会死循环
} else if (nums[lo] <= nums[mid]) {
if (nums[lo] <= target && target < nums[mid]) {
hi = mid - 1;
} else {
lo = mid + 1;
}
} else if (nums[mid] < nums[lo]) {
if (nums[hi] >= target && target > nums[mid]) {
lo = mid + 1;
} else {
hi = mid - 1;
}
}
}
return -1;
}