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

    题目来源:剑指6旋转数组的最小数字

    题目描述:

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

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

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

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

    解题思路:用二分法,见代码

    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
            int size=rotateArray.size();
            if(size==0) return 0;
            int left=0,right=size-1,mid=0;
            // rotateArray[left] >= rotateArray[right] 确保旋转
            while(rotateArray[left]>=rotateArray[right]){
                if(right-left==1)
                {
                    mid=right;
                    break;
                }
                mid=left+(right-left)/2;
                //三者相等无法确定中间元素属于前面还是后面,故采用顺序查找最小值
                if(rotateArray[left]==rotateArray[right]&&rotateArray[left]==rotateArray[mid])
                {
                    return OrderFind(rotateArray,left,right);
                }
                //中间元素位于前面的子数组,此时最小元素位于中间元素的后面
                else if(rotateArray[mid]>=rotateArray[left])
                {
                    left=mid;
                }
                //中间元素位于后面的子数组,此时最小元素位于中间元素的前面
                else if(rotateArray[mid]<=rotateArray[right])
                {
                    right=mid;
                }
            }
            return rotateArray[mid];
        }
    private:
        int OrderFind(vector<int> rotateArray,int left,int right)
        {
            int result=rotateArray[left];
            for(int i=left;i<=right;i++)
            {
                if(result>rotateArray[i]) result=rotateArray[i];
            }
            return result;
            
        }
    };
    
  • 相关阅读:
    随记
    bzoj3551 [ONTAK2010]Peaks加强版
    bzoj2763 [JLOI2011]飞行路线
    bzoj1758 [Wc2010]重建计划
    bzoj1857 [Scoi2010]传送带
    bzoj4519 [Cqoi2016]不同的最小割
    bzoj2229 [Zjoi2011]最小割
    bzoj4129 Haruna’s Breakfast
    bzoj1835 [ZJOI2010] 基站选址
    bzoj2160 拉拉队排练
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13217062.html
Copyright © 2011-2022 走看看