寻找旋转排序数组中的最小值

153 Find Minimum in Rotated Sorted Array

问题描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。

示例 1:
输入: [3,4,5,1,2]
输出: 1
示例 2:
输入: [4,5,6,7,0,1,2]
输出: 0
/**
* 思路:
* 第一个小于前一个元素的元素,就是最小值。
* 我们通过二分查找的,进行优化。
*/
class Solution {
    public int findMin(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        if(nums.length == 2){
            return Math.min(nums[0],nums[1]);
        }
        int l = 0;
        int h = nums.length -1;
        while(l<=h){
            if(l==h){
                return nums[l];
            }
            int mid = (h-l)/2 + l;
            if(nums[mid] > nums[mid+1]){
                return nums[mid+1];
            }
            if(nums[mid] < nums[h]){
                h = mid;
            }else if(nums[mid] > nums[h]){
                l = mid;
            }
        }
        return nums[l];
    }
}

参考:

posted @ 2024-02-01 22:44  行行行行星  阅读(12)  评论(0)    收藏  举报