Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II)

Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II)


 

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

请找出其中最小的元素。

注意数组中可能存在重复的元素。

示例 1:

输入: [1,3,5]
输出: 1

示例 2:

输入: [2,2,2,0,1]
输出: 0


153题很像,只不过这题会有重复的数字,这种情况用153的代码会报错:3 3 1 3
这个样例是从1和3的节点中间旋转的,那我们只需要在153的代码上作出如下改动即可:
如果nums[mid]==nums[R] 就R--,因为他们两个一样,所以右边的那个直接省略掉。

class Solution {
    public int findMin(int[] nums) {
        if(nums.length==0 || nums==null) return 0;
        int L = 0;
        int R = nums.length - 1;
        while(L<R){
            int mid = (L+R)>>>1;
            if(nums[mid]>nums[R]){
                L = mid+1;
            }else if(nums[mid]<nums[R]){
                R = mid;
            }else{
                R--;
            }
        }
        return nums[L];
    }
}

 



posted @ 2019-08-26 01:26  秦羽纶  阅读(133)  评论(0编辑  收藏  举报