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

    发现这个程序有几个点特别好:

    1、旋转数组意味着如果某部分的序列前面的数小于后面的数则是顺序排列的,则可以直接取前面的数为最小值

      while(rotateArray[mid]>=rotateArray[high])  //这个判断可以直接省略中间很多顺序串的比较

    2、if(high-low ==1) 配合while判断可以直接省略最后几步判断

    3、else if(rotateArray[mid]>=rotateArray[low])

                         low=mid;

                else if(rotateArray[mid]<=rotateArray[high])

                        high=mid;  // 假设中间的是最小的

    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
          if(rotateArray.size()==0) return 0;
          int low=0,high=rotateArray.size()-1,mid=low;
            while(rotateArray[mid]>=rotateArray[high])
            {
                if(high-low ==1)
                   return rotateArray[high];
                mid=(low+high)/2;
                if(rotateArray[low]==rotateArray[mid] && rotateArray[mid]==rotateArray[high])
                    return inOrder(rotateArray,low,high);
                else if(rotateArray[mid]>=rotateArray[low])
                         low=mid;
                    else if(rotateArray[mid]<=rotateArray[high])
                          high=mid;
                
            } 
            return rotateArray[low];
            }
        int inOrder(vector<int> str,int low,int high)
            {
            int min=str[low];
            for(int i=low+1;i<=high;i++)
                if(min>str[i])min=str[i];
                return min;
        }
    };
  • 相关阅读:
    生成二维码
    XML 基础应用
    C# 后台模拟请求一般处理程序
    json
    导出excel td格式设置
    发布IIS后 上传文件过大失败解决方案
    SQL Server 日期+4位流水号
    垮库操作
    触发器结合游标删除关联表数据
    我是到今天才懂得“放疗”是居里夫人发明的,你呢?
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5293295.html
Copyright © 2011-2022 走看看