zoukankan      html  css  js  c++  java
  • 154. Find Minimum in Rotated Sorted Array II

    Follow up for "153. Find Minimum in Rotated Sorted Array":
    What if duplicates are allowed?
    Would this affect the run-time complexity? How and why?

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

    Example 1:

    0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2.

    Example 2:

    1 3 3 3 might become 3 3 1 3.

    Find the minimum element.

    解题重点:
    仍然考虑 5 6 7 0 1 2 3, 再结合3 3 1 33 1 3 3来思考.

    重要思考: 5 6 7 0 1 2 3, 为什么当 A[mid] <= A[hi] 时, 是 hi = mid,而不是 hi = mid - 1 ?
    1 < 3, 1有可能是要找的值, 故而 hi = mid.
    7 > 3, 7必然不是要找的, 而mid +1 处才有可能是要找的,故而 lo = mid + 1.
    本题再结合3 3 1 33 1 3 3来思考.
    当 A[mid] == A[hi] 时候, hi 所指的 3 就没用了, 往前挪挪, hi--

    与 153题想比, 当A[mid] == A[hi] 时候, hi--就行了.
    (O(logn)) time, (O(1)) extra space.

    //思考时最好仍基于 5 6 7 0 1 2 3
    int findMin(vector<int>& A) {
        int lo = 0, hi = A.size() - 1, mid;
        while (lo < hi) {
            mid = (lo + hi) / 2;
            if (A[mid] > A[hi]) lo = mid + 1;
            else if (A[mid] < A[hi]) hi = mid;
            else hi--; // 此时 A[mid] == A[hi]
        }
        return A[lo]; //此时 lo == hi
    }
    
  • 相关阅读:
    mysqlbinlog
    MySQL二进制日志
    Slave I/O: Got fatal error 1236
    Zabbix监控nginx-rtmp status(json版)
    shell命令find
    Zabbix监控mysql performance
    Zabbix监控disk performance
    MySQL复制配置(多主一从)
    数据建立和保持时间
    Source insight 中 标题栏路径显示完整路径的方法
  • 原文地址:https://www.cnblogs.com/ZhongliangXiang/p/7380959.html
Copyright © 2011-2022 走看看