【LeetCode(Java) - 33】搜索旋转排序数组

    科技2025-09-17  24

    文章目录

    1、题目描述2、解题思路3、解题代码

    1、题目描述

    2、解题思路

      输入的数组是一个升序排序数组的旋转,可以看成如下图所示的状态:

      如果对于每一次调整区间范围,都有以下两种情况:

      1、mid 在左侧部分

      此时,参照对象就是 nums[0],如果目标值大于等于它,且目标值小于 nums[mid],则 r = mid - 1,否则 l = mid + 1。

      2、mid 在右侧部分

      此时,参照对象是 nums[n-1] ,如果目标值小于等于它,且目标值大于 nums[mid],则 l = mid + 1,否则 r = mid + 1。

    3、解题代码

    class Solution { public int search(int[] nums, int target) { int n = nums.length; if (n == 0) { return -1; } if (n == 1) { return nums[0] == target ? 0 : -1; } int l = 0, r = n - 1; while (l <= r) { int mid = l + (r - l) / 2; if (nums[mid] == target) { return mid; } if (nums[0] <= nums[mid]) { if (nums[0] <= target && target < nums[mid]) { r = mid - 1; } else { l = mid + 1; } } else { if (nums[mid] < target && target <= nums[n - 1]) { l = mid + 1; } else { r = mid - 1; } } } return -1; } }
    Processed: 0.012, SQL: 8