程序媛小姐姐分享微软面试真题:寻找旋转排序数组中的最小值

2020-09-07 17:57:54 +08:00
 hakunamatata11

假设一个排好序的数组在其某一未知点发生了旋转(比如 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2 )。你需要找到其中最小的元素。

在线评测地址:https://www.lintcode.com/problem/find-minimum-in-rotated-sorted-array/?utm_source=sc-v2ex-fks

样例 1:

输入:[4, 5, 6, 7, 0, 1, 2]
输出:0
解释:
数组中的最小值为 0

样例 2:

输入:[2,1]
输出:1
解释:
数组中的最小值为 1

解题思路

等效方法

复杂度分析

public class Solution {
    /**
     * @param nums: a rotated sorted array
     * @return: the minimum number in the array
     */
    public int findMin(int[] nums) {
        int left = 0, right = nums.length - 1;
        // 二分法
        while (left < right){
            // 最小值在 left
            if (nums[left] < nums[right]){
                return nums[left];
            }
            int mid = left + (right - left) / 2;
            // 最小值在[left, mid]
            if (nums[left] > nums[mid]){
                right = mid;
            }
            // 最小值在(mid, right]
            else{
                left = mid + 1;
            }
        }
        return nums[left];
    }
}

更多题解参考:https://www.jiuzhang.com/solution/find-minimum-in-rotated-sorted-array/?utm_source=sc-v2ex-fks

242 次点击
所在节点    编程
3 条回复
cczeng
2020-09-08 09:35:40 +08:00
👍
sakura1
2020-09-30 11:51:34 +08:00
这个题我也做过,有重复元素的情况就另说了
hakunamatata11
2020-09-30 13:35:05 +08:00
@sakura1 嗯嗯

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704934

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX