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
说明:
- 这道题是 寻找旋转排序数组中的最小值 的延伸题目。
- 允许重复会影响算法的时间复杂度吗?会如何影响,为什么?
- 题目难度:困难。
- 英文网址:154. Find Minimum in Rotated Sorted Array II 。
- 中文网址:154. 寻找旋转排序数组中的最小值 II 。
思路分析
求解关键:使用分治思想的,这道题和 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 。