首页 > 其他 > 详细

[LeetCode]Find Minimum in Rotated Sorted Array

时间:2015-03-29 12:17:49      阅读:265      评论:0      收藏:0      [点我收藏+]

Find Minimum in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

 解题思路:

最开始不明白旋转数组是何物,最初的想法就是逐个元素扫描,找到一个最小的值,代码如下:
class Solution {
public:
    int findMin(vector<int> &num) {
        int len = num.size();
        int minNumber = num[0];
        for(int i=1; i<len; i++){
            if(num[i]<minNumber){
                minNumber = num[i];
            }
        }
        return minNumber;
    }
};
时间复杂度为O(n),leetcode也AC了,而且执行速度很快,只需要7ms。但LeetCode不会出这么容易的问题吧?问题肯定在旋转数组上了,于是乎,查找相关网页如下http://blog.csdn.net/lalor/article/details/7961323,里头的旋转代码非常经典。弄清楚旋转数组是什么之后,我们利用旋转数组部分有序的情况,得到下面的代码:
class Solution {
public:
    int findMin(vector<int> &num) {
        int len = num.size();
        int min = 0;
        int max = len - 1;
        int middle = (min + max) / 2;
        while(true){
            //判断边界
            if(min==max){
                return num[min];
            }
            if(min + 1 == max){
                if(num[min]<num[max]){
                    return num[min];
                }else{
                    return num[max];
                }
            }
            if(num[middle]<num[max]){
                max=middle;
            }else{
                min = middle;
            }
            middle = (max + min) / 2;
        }
    }
};
这里每次去除一半的查询空间,类似于二分查找,故其时间复杂度为O(logn)。

[LeetCode]Find Minimum in Rotated Sorted Array

原文:http://blog.csdn.net/kangrydotnet/article/details/44725217

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!