美文网首页
LeetCode 153. Find Minimum in Ro

LeetCode 153. Find Minimum in Ro

作者: Skymiles | 来源:发表于2019-06-21 13:45 被阅读0次

Find Minimum in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

Find the minimum element.

You may assume no duplicate exists in the array.

Example 1:

Input: [3,4,5,1,2]
Output: 1
Example 2:

Input: [4,5,6,7,0,1,2]
Output: 0


方法一:推荐用binary search. O(logn)

因为题目已经说这是一个排好序的数组,旋转得到的, 情况无非下图三种情况中的一种(大端翻折到最做边,小端翻折到最右边):


rotated.png

解题思路:

还是通过左( 右)边界和中间的大小关系来得到左边或者右边有序的信息。ps:至于具体和左边界还是和右边界比这个其实无所谓,都可以。假如和右边界比较:
原数组:0 1 2 4 5 6 7
情况1: 6 7 0 1 2 4 5
情况2: 2 4 5 6 7 0 1
(1) A[mid] < A[end]:A[mid : end] sorted => min不在A[mid+1 : end]中
搜索A[start : mid]
(2) A[mid] > A[end]:A[start : mid] sorted且又因为该情况下A[end]<A[start] => min不在A[start : mid]中
搜索A[mid+1 : end]
(3) base case:
a. start = end,必然A[start]为min,为搜寻结束条件。
b. start + 1 = end,此时A[mid] = A[start],而min = min(A[mid], A[end])。而这个条件可以合并到(1)和(2)中。

分析到这里就可以写代码了:推荐九章算法的二分模版:https://github.com/billryan/algorithm-exercise/blob/master/zh-hans/basics_algorithm/binary_search.md

  public int findMin(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int length = nums.length;
        if (length == 1) {
            return nums[0];
        }
        if (length == 2) {
            return Math.min(nums[0], nums[1]);
        }

        int start = 0, end = length - 1;
        while (start + 1 < end) {
            int mid = start + (end - start) / 2;
            // 搜索A[start : mid]
            if (nums[mid] <= nums[end]) {
                end = mid;
            }
            // 搜索A[mid : end]
            else {
                start = mid;
            }
        }
        if (nums[start] <= nums[end]) {
            return nums[start];
        } else {
            return nums[end];
        }
    }

相关文章

网友评论

      本文标题:LeetCode 153. Find Minimum in Ro

      本文链接:https://www.haomeiwen.com/subject/hbvtqqtx.html