剑指offer——面试题8:旋转数组的最小数值

来源:互联网 发布:美国windows vps 编辑:程序博客网 时间:2024/05/17 22:30

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{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 minvec = 0;         for(int i = rotateArray.size()-1;i>=0;--i)         {             if(rotateArray[i]< rotateArray[i-1])             {                 minvec = rotateArray[i];                 break;             }         }        return temp;    }};

    分析:显然,这一题利用直观的解法,挺简单,时间复杂度为 O(n),可是还是《剑指offer》厉害,还有一个O(log n)的解法

     O(log n)的解法:

    旋转之后的数组,实际上可以划分为两个排序的子数组,而且前面的子数组元素都大于或者等于后面子数组的元素。我们还注意到,最小的元素,恰好是这两个子数组的分界线。在排序的数组中,可以利用二分查找法实现 O(log n)的查找。牵扯到排序,等过一段时间再系统整理

原创粉丝点击