【Leetcode】旋转数组最小值

来源:互联网 发布:tcp编程用什么语言 编辑:程序博客网 时间:2024/06/07 01:24

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/

有一个递增的旋转数组,找出最小值。

个人习惯写二分算法时,while的条件为low<=high,加等号。这是第一道遇到的不能加等号的题目。

需要首先处理特殊情况,就是本身有序的情况,如果a[low] <= a[high],说明本身有序,直接返回a[low]即可,否则二分查找。

当a[m]>a[high]时,说明m在左侧,这时铁定需要找[m+1,high],否则,需要找[low, m],注意一个是m+1,一个是m,最后返回的是a[low],找特值判断即可。

代码:

    public int findMin(int[] nums) {    if(nums[0] <= nums[nums.length - 1])    return nums[0];        int low = 0, high = nums.length - 1;        while(low < high){           int m = (low + high) / 2;           if(nums[m] > nums[high])           low = m + 1;           else           high = m;        }        return nums[low];    }


原创粉丝点击