cherrychenlee

导航

 

原文地址:https://www.jianshu.com/p/23e5561a2641

时间限制:3秒 空间限制:32768K

题目描述

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

我的代码

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        //最小值为在交界处的较小的值
        //如果元素全相同,那么需要使用遍历来查找最小值
        int arrSize=rotateArray.size();
        if(arrSize<1)
            return 0;
        int left=0,right=arrSize-1;
        while(left<right){
            if(right-left==1)
                return rotateArray[right];
            int mid=(left+right)/2;
            if((rotateArray[left]==rotateArray[mid])&&
               (rotateArray[right]==rotateArray[mid]))
               return findMinNumber(rotateArray,left,right);
            if(rotateArray[left]<=rotateArray[mid])
               left=mid;
            if(rotateArray[mid]<=rotateArray[right])
               right=mid;
        }
        return 0;
    }
    int findMinNumber(vector<int> array, int start, int end){
        int res=array[start];
        for(int i=start+1;i<=end;i++)
            if(array[i]<res)
                res=array[i];
        return res;
    }
             
};

运行时间:28ms
占用内存:608k

posted on 2019-04-27 22:42  cherrychenlee  阅读(67)  评论(0)    收藏  举报