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

描述

假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。

你需要找到其中最小的元素。

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

样例

给出[4,4,5,6,7,0,1,2]  返回 0

思路:跟无重复相比,用二分法判断mid位和end位相等时,存在三种情况,最小位于mid前面,比如,0,0,1,1,1或1,0,1,1,1,也可能最小位于mid后面,比如1,1,1,0,1.或者本身就是最小值,所以两分时不确定怎么做,简单做法就是去重,end=end-1,因为mid和end位的值相等,不会去掉最小值。
public class Solution {
    /**
     * @param nums: a rotated sorted array
     * @return: the minimum number in the array
     */
    public int findMin(int[] nums) {
        // write your code here
        int n=nums.length;
        int mid=0;
        int start=0,end=n-1;
        while(startnums[end]){
                start=mid+1;
            }else{
                end=end-1; 
            }
        }
        return nums[start];
    }
}

你可能感兴趣的:(java)