154. Find Minimum in Rotated Sorted Array II

题目描述和难度

  • 题目描述:

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

请找出其中最小的元素。

注意数组中可能存在重复的元素。

示例 1:

输入: [1,3,5]
输出: 1

示例 2:

输入: [2,2,2,0,1]
输出: 0

说明:

思路分析

求解关键:使用分治思想的,这道题和 LeetCode 第 153 题没有区别。

参考解答

参考解答1:使用分治的思想。

public class Solution {

    public int findMin(int[] nums) {
        int len = nums.length;
        if (len == 0) {
            throw new IllegalArgumentException("数组为空,最小值不存在");
        }
        return findMin(nums, 0, len - 1);
    }

    private int findMin(int[] nums, int left, int right) {
        if (left + 1 >= right) {
            return Math.min(nums[left], nums[right]);
        }
        if (nums[left] < nums[right]) {
            return nums[left];
        }
        int mid = left + (right - left) / 2;
        return Math.min(findMin(nums, left, mid - 1), findMin(nums, mid, right));
    }

    public static void main(String[] args) {
        int[] nums = {1, 3, 5};
        Solution solution = new Solution();
        int solutionMin = solution.findMin(nums);
        System.out.println(solutionMin);
    }
}

本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0154-find-minimum-in-rotated-sorted-array-ii ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com