zoukankan      html  css  js  c++  java
  • Find Minumu in Rotated Sorted Array II

    https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii

    对于一个有序数组,将其元素以某一个元素为轴进行旋转,比如[0,1,2,3,4,5,6,7]可能会变成[4,5,6,7,0,1,2,3]
    求这个经过旋转的数组的最小值,这里数组中存在重复值

    如果存在重复值,则需要一个一个的比较,此时最坏的情况下,即所有值都相等的情况下,会把时间复杂度从 (logN) 拉到 (O(n))
    同时对于存在重复值的有序数组,比如 [1,3,3]这种,需要提前把判断 nums[lo] >= nums[hi],否则会造成相等判断把 lo 拉上去,远离 最小值

    class Solution {
    public:
        int findMin(vector<int>& nums) {
            int lo = 0, hi = nums.size()-1;
       
            
            while(lo < hi && nums[lo] >= nums[hi])// 这里加nums[lo]>=nums[hi]是因为如果nums[lo]<nums[hi],那么此时lo - hi之间的数已经是有序的了,因此直接返回nums[lo]就可以
            {
                int mi = (lo + hi)>>1;
                if(nums[mi] < nums[hi])
                    hi=mi;
                else if (nums[mi] > nums[hi])
                    lo = mi +1;
                else
                    lo = lo+1; // 一个一个往上比较
            }
            return nums[lo];
        }
    };
    
  • 相关阅读:
    ACM-ICPC 2018 南京赛区网络预赛 J.Sum
    汉诺塔
    汉诺塔
    D
    D
    数学小定理
    数学小定理
    Python index()方法
    Python endswith()方法
    Python encode()方法
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/12527571.html
Copyright © 2011-2022 走看看