Find Minimum in Rotated Sorted Array 解题报告

Find Minimum in Rotated Sorted Array

Description

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.

Notice

You may assume no duplicate exists in the array.

实现思路

这道题用二分法求解。
要找到最小的,根据旋转特性,关键在于找“最大”的下一个,比如12345,旋转成45123,显然1在5的后边。
再观察,我们发现,最大的元素,必定比最右边的元素大。
所以每次可以取中间元素,然后和最后一个比:
1. 如果小于最后一个,说明属于从前面折到后面的,则最小必定在前面,当然也有可能它本身就是最小,故left = mid
2. 而如果大于最后一个,则最大的还在后边,可以取right = mid + 1
不断重复1、2,直到left = right,终止循环,则left必为我们要找的最小元素

/**
 * @param nums: a rotated sorted array
 * @return: the minimum number in the array
 */
public int findMin(int[] nums) {
    // write your code here
    int len = nums.length;
    if(len == 1){
        return nums[0];
    }
    int left = 0,right = len-1;
    int min = nums[0];
    while(left < right){
        int mid = (right - left) / 2 + left;
        if(nums[mid] > nums[right]){
            left = mid + 1;
        }else{
            right = mid;
        }
    }
    return nums[left];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值