您的位置:首页 > Web前端

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

2017-08-24 15:46 525 查看
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{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;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: