题目描述

链接:https://leetcode-cn.com/problems/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) {
        int low = 0, high = nums.length - 1;
        while (low < high) {
            int mid = low + (high - low) / 2;
            if (nums[mid] > nums[high]) { // 答案在右半部
                low = mid + 1;
            } else {       // 答案在左半部, 防止遗漏
                high = mid;
            }
        }
        return nums[low];
    }
}

解题思路

可以把这个数组看成左右两个递增序列, 而最小值一定在右递增序列中, 对某一个点进行判断, 看是否大于最右边递增序列, 如果大于, 就说明当前处于左序列, 排除掉 如果小于, 当前处于右序列, 往左走.