leetcode33. Search in Rotated Sorted Array

旋转数组找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;
    }

你可能感兴趣的:(leetcode33. Search in Rotated Sorted Array)