zoukankan      html  css  js  c++  java
  • LeetCode11 旋转数组的最小数

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。  

    示例 1:

    输入:[3,4,5,1,2]
    输出:1
    示例 2:

    输入:[2,2,2,0,1]
    输出:0

    同样用二分查找。对于mid,如果小于right,就说明右侧是有序的,mid右边的都不会是最小的,right=mid;如果大于right,说明包括的mid的左侧都是更大的,left=mid+1;如果mid=right,那就出现了多个相似的数的情况,不能判断mid是处于目标数左侧还是右侧,但是可以肯定的是,right的左侧还有和right相同的数,--right。

     1 class Solution {
     2 public:
     3     int minArray(vector<int>& numbers) {
     4         int left=0,right=numbers.size()-1;
     5         while(left<right){
     6             int mid=left+((right-left)>>1);
     7             if(numbers[mid]>numbers[right]){
     8                 left=mid+1;
     9             }
    10             else if(numbers[mid]<numbers[right]){
    11                 right=mid;
    12             }
    13             else{
    14                 --right;
    15             }
    16         }
    17         return numbers[left];
    18     }
    19 
    20     
    21 };
  • 相关阅读:
    MD5 SHA1 CRC32
    tf 常用函数 28原则
    matplotlib 28原则
    markdown 基本语法
    tf 数据读取
    django 自定义身份认证
    代理部署
    社区发现算法问题&&NetworkX&&Gephi
    机器学习中的数学——拉格朗日乘子法
    过拟合(Overfitting)和正规化(Regularization)
  • 原文地址:https://www.cnblogs.com/rookiez/p/13361462.html
Copyright © 2011-2022 走看看