• 二分查找来查找旋转数组


     把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

    输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。

    例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

    NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

    二分查找代码

    class Solution
    { public:
        int minNumberInRotateArray(vector<int> rotateArray) 
        {
            int len = rotateArray.size(); 
            if(len == 0) return 0; 
            int left = 0, right = len -1, mid = 0; 
    
            while(rotateArray[left] >= rotateArray[right])
            { 
                //左是大数组的最后一个,右是小数组的第一个,返回右的值
                if(right - left == 1)
                { 
                    mid = right; 
                    break; 
                } 
                mid = (left + right)/2; 
                //如果左,右,中间的值相等,不知道中间在哪个数组中,需要用笨方法查找
                if(rotateArray[left] == rotateArray[right] && rotateArray[left] == rotateArray[mid])
                { 
                    return shunxuOrder(rotateArray, left, right); 
                } 
                //如果中间的值小于右边的值,那么中间的值在小数组中,让右等于中间的值
                //如果中间的值等于右边的值,此时中间的值一定小于左边的值才能走到这里,小于左边的值说明它在小数组里,让右等于中间的值
                if(rotateArray[mid] <= rotateArray[right])
                { 
                    right = mid; 
                } 
                //如果中间的值大于右边的值,那么中间的值在大数组中,让左等于中间的值
                else
                { 
                    left = mid; 
                } 
            } 
            return rotateArray[mid]; 
    } 
    private: int shunxuOrder(vector<int> &num, int left, int right)
             { 
                 int i; 
                 int result = num[left]; 
                 for(i = left + 1; i < right; ++ i)
                 { 
                     if(num[i] < result)
                     { 
                         result = num[i]; 
                     } 
                 } 
                 return result; 
             } 
    };
  • 相关阅读:
    ThinkPHP---框架介绍
    (独孤九剑)--cURL
    浅谈Session与Cookie的区别与联系
    (独孤九剑)--会话管理和控制
    PHP数据乱码
    (独孤九剑)---PHP操作MySQL数据库
    错误宝典
    变量、常量、注释、PEP8开发规范、数据类型、Python2和Python3的区别、用户输入、流程控制语句
    什么是编程语言
    CSS
  • 原文地址:https://www.cnblogs.com/TheQi/p/9141680.html
Copyright © 2020-2023  润新知