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

    方法1:采用顺序遍历的方法,最优的时间复杂度为O(1),最差的时间复杂度为O(n),

    方法2,采用二分查找法,时间复杂度为O(logn);该方法在左神算法里也出现过

    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
             /*
            (1)判断数组为空的情况下
            (1)判断数组有序的情况下,返回数组的第一个元素
            (3)当数组中只有两个元素的时候,返回最小值
            (4)否则当数组中的元素个数大于2的时候,将arr[left]和arr[right]和arr[mid]相比
            */
            int n=rotateArray.size();
            if(n==0)return 0;
            int left=0;
            int right=n-1;
            int res;
            while(left<right)
            {
                int mid=left+(right-left)/2;
                //数组有序的情况下
                if(rotateArray[left]<rotateArray[right])
                    return rotateArray[left];
                //子序列中只有两个元素的情况
                if(left+1==right)return rotateArray[left]<rotateArray[right]?rotateArray[left]:rotateArray[right];
               //判断最小值在左子序列还是右子序列
                if(rotateArray[left]>rotateArray[mid])
                   right=mid;
                else
                    if(rotateArray[mid]>rotateArray[right])
                        left=mid;
                if(rotateArray[left]==rotateArray[right]==rotateArray[mid])
                {
                   res=rotateArray[left];
                    for(int i=left;i<=right;i++)
                    {
                        if(rotateArray[i]<res)
                            res=rotateArray[i];
                    }
                    break;
                }
            }
            return res;
        }
    };

  • 相关阅读:
    简单使用GDB
    【老人孟岩经验谈】如何学习一本新的编程语言
    【做存档】如何争取到真正有用的人脉?
    回头来看C语言里的static
    Spring MVC 教程,快速入门,深入分析[1220]
    eclipse ibabis代码生成插件abator功能扩展
    在MyEclipse中配置Tomcat服务器
    将远程调试的控制台信息输出至Eclipse
    LOG4J.PROPERTIES配置详解
    java Map 怎么遍历
  • 原文地址:https://www.cnblogs.com/xiaoji123/p/10523122.html
Copyright © 2011-2022 走看看