zoukankan      html  css  js  c++  java
  • 153. 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.

    代码如下:
    二分查找变形.
    (O(logn)) time, (O(1)) extra space.

    // Binary search
    int findMin(vector<int>& A) {
        int n = A.size(), lo = 0, hi = n - 1, mid;
    
        while (lo < hi) {
            if (A[0] < A[n - 1]) return A[0];
    
            mid = (lo + hi) / 2;
            if (A[mid] > A[hi]) lo = mid + 1;
            else hi = mid;
    
            // 重要思考: 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
        }
        return A[lo];
    }
    
  • 相关阅读:
    5-29
    5-28
    5-27
    -5-26
    5-25
    5-24
    5-21
    RabbitMQ消息中间件极速入门与实战
    细说java多线程之内存可见性
    全面解析java注解
  • 原文地址:https://www.cnblogs.com/ZhongliangXiang/p/7374918.html
Copyright © 2011-2022 走看看