码迷,mamicode.com
首页 > 其他好文 > 详细

Find Minimum in Rotated Sorted Array -- LeetCode

时间:2014-10-25 08:10:05      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:java   leetcode   面试   二分查找   算法   

这道题是Search in Rotated Sorted Array的扩展,区别就是现在不是找一个目标值了,而是在bst中找最小的元素。主要思路还是跟Search in Rotated Sorted Array差不多,还是通过左边界和中间的大小关系来得到左边或者右边有序的信息,如果左半边有序,那么左半边最小就是左边第一个元素,可以和当前最小相比取小的,然后走向右半边。否则,那么就是右半半边第一个元素,然后走向左半边。这样子每次可以截掉一半元素,所以最后复杂度等价于一个二分查找,是O(logn),空间上只有四个变量维护二分和结果,所以是O(1)。代码如下:
public int findMin(int[] num) {
    if(num == null || num.length==0)
        return 0;
    int l = 0;
    int r = num.length-1;
    int min = num[0];
    while(l<r-1)
    {
        int m = (l+r)/2;
        if(num[l]<num[m])
        {
            min = Math.min(num[l],min);
            l = m+1;
        }
        else if(num[l]>num[m])
        {
            min = Math.min(num[m],min);
            r = m-1;
        }
        else
        {
            l++;
        }
    }
    min = Math.min(num[r],min);
    min = Math.min(num[l],min);
    return min;
}
有朋友可能注意到上面的实现还有第三种情况,就是左边界和中间是相等的情况,这道题目其实是不用发生的,因为元素没有重复,而Find Minimum in Rotated Sorted Array II这道题这考虑了元素重复的情况,这里只是为了算法更加一般性,就把那个情况也包含进来,有兴趣的朋友可以看看Find Minimum in Rotated Sorted Array II对重复元素的分析哈。

Find Minimum in Rotated Sorted Array -- LeetCode

标签:java   leetcode   面试   二分查找   算法   

原文地址:http://blog.csdn.net/linhuanmars/article/details/40449295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!