zoukankan      html  css  js  c++  java
  • 剑指offer | 旋转数组的最小数字 | 07

    思路分析

    只能说这个是一个很经典的二分题目.

    如上图所示,排序数组进行旋转之后,右排序数组的值都是小于或等于左排序数组的.

    需要注意,需要要右边排序数组相等的部分隐去,这样才能进行二分操作.

    二分写法

    cpp

    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
            vector<int> (&nums) = rotateArray;
            if(nums.empty())return 0;
            int n = nums.size()-1;
            while(n>0 && nums[0]==nums[n])n--; // 去除右排序数组的相等部分
            if(nums[n]>nums[0])return nums[0]; // 右排序数组被删完了
            int l=0,r=n;
            while(l<r){
                int mid = l+r>>1;
                if(nums[0]>nums[mid])r=mid;
                else l = mid+1;
            }
            return nums[r];
            
        }
    };
    

    python

    # -*- coding:utf-8 -*-
    class Solution:
        def minNumberInRotateArray(self, rotateArray):
            nums = rotateArray
            if not nums:return 0
            n = len(nums)-1
            while n>0 and nums[0]==nums[n]:n-=1
            if nums[n]>nums[0]:return nums[0]
            l,r=0,n
            while l<r:
                mid = l+r>>1
                if nums[0]>nums[mid]:r=mid
                else: l=mid+1
            return nums[l]
                
    
  • 相关阅读:
    svn上传文件钩子
    linux服务器版svn安装
    csp-s模拟55
    csp-s模拟54
    csp-s模拟53
    csp-s模拟52
    csp-s模拟51
    csp-s模拟50
    csp-s模拟49
    csp-s模拟48
  • 原文地址:https://www.cnblogs.com/Rowry/p/14305309.html
Copyright © 2011-2022 走看看