【LeetCode(Java) - 153】寻找旋转排序数组中的最小值

    科技2025-09-24  70

    文章目录

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

    1、题目描述

    2、解题思路

      画个示意图来表示旋转后的数组:

      采用二分查找的思路:

      1、如果 nums[mid] 大于右侧,说明右侧就是最小值;

      2、如果 nums[mid] 小于左侧,说明左侧就是最小值;

      3、如果 nums[mid] 即不大于右侧,也不小于左侧,说明在其中一边:

      如果 nums[mid] 大于 nums[0],说明此时在左侧;反之,此时在右侧。

    3、解题代码

    class Solution { public int findMin(int[] nums) { if (nums.length == 1) { return nums[0]; } int left = 0, right = nums.length - 1; if (nums[right] > nums[0]) { return nums[0]; } while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] > nums[mid + 1]) { return nums[mid + 1]; } if (nums[mid - 1] > nums[mid]) { return nums[mid]; } if (nums[mid] > nums[0]) { left = mid + 1; } else { right = mid - 1; } } return -1; } }
    Processed: 0.010, SQL: 8