剑指offer8旋转数组的最小数字

来源:互联网 发布:三菱触摸屏编程软件 编辑:程序博客网 时间:2024/06/11 03:22

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

//二分查找与顺序查找的结合

class Solution {

    public:
    int minNumberInRotateArray(vector<int> rotateArray) {
      if(rotateArray.empty())
          return 0;
        int size=rotateArray.size();
        int left=0,right=size-1,mid=0;
        while(rotateArray[left]>=rotateArray[right])
        {
            if(right-left==1)
            {
             mid=right;
                break;
            }
                
            int mid=left+(right-left)/2;
            if(rotateArray[left]==rotateArray[right]&&rotateArray[left]==rotateArray[mid])//数组11101
             return MinOrder(rotateArray,left,right);
            if(rotateArray[mid]>=rotateArray[left])
                  left=mid;
            else
                  right=mid;
        }
        return rotateArray[mid];
    }
private:
    // 顺序寻找最小值
    int MinOrder(vector<int> &num,int left,int right){
       int result = num[left];
        for(int i = left + 1;i < right;++i){
            if(num[i] < result){
                result = num[i];//为什么不直接返回,直接返回报错
            }//if
        }//for
        return result;
    }
};
原创粉丝点击