33. 搜索旋转排序数组

33. 搜索旋转排序数组

题解:

  1. 二分找出翻转的位置
  2. 然后判断在target在前后哪个区间,二分找到target的位置
class Solution {
   public int search(int[] nums, int target) {
        int n = nums.length;
        if (n == 1) {
            return target == nums[0] ? 0 : -1;
        }
        int l = 0, r = n - 1;
        while (l < r) {
            int mid =  (r + l + 1) / 2 ;
            if (nums[mid] >= nums[0]) l = mid;
            else r = mid - 1;
        }
        // 在第一个区间
        if (target >= nums[0]) {
            l = 0;
        } else {
        // 在第二个区间
            l = r + 1;
            r = n - 1;
        }
        while (l < r) {
            int mid = l + (r - l) / 2;
            if (nums[mid] >= target) r = mid;
            else l = mid + 1;
        }
        return nums[r] == target ? r : -1;
    }
}
posted @ 2022-11-06 23:54  Eiffelzero  阅读(23)  评论(0)    收藏  举报