LeetCode : 153. Find Minimum in Rotated Sorted Array旋转有序数组的最小值

试题
Suppose an array sorted in ascending order 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.

You may assume no duplicate exists in the array.

Example 1:

Input: [3,4,5,1,2]
Output: 1
Example 2:

Input: [4,5,6,7,0,1,2]
Output: 0
代码
1、以数组最后一个数作为flag,进行区间更新。如果小于说明在左区间,此时需注意mid有可能刚好为最小值。如果大于,说明在右区间,正常更新即可
2、循环终止条件为left<right
3、用右边值作为flag的另一好处是能够直接处理从小到大的有序数组。

class Solution {
    public int findMin(int[] nums) {
        int left=0, right=nums.length-1;
        while(left<right){
            int mid = left + (right-left)/2;
            if(nums[mid]<=nums[right]){
                right = mid;
            }else{
                left = mid+1;
            }
        }
        return nums[left];
    }
}

猜你喜欢

转载自blog.csdn.net/qq_16234613/article/details/89501930
今日推荐