Java日记2018-08-10

find minimum in rotated sorted array II
旋转数组找到最小值,其中数组有重复值

使用二分法,最右的值小于中间值,那么最小值在右边。left就应该mid+1的地方,否则最小的值在左边,right=mid
当有重复值,即相等的时候,直接left加1呗,或者right--


public static int findmin1(int[] arr){
        int left =0;
        int right = arr.length-1;
        
        while(left<right){
            int mid = (left+right)/2;
            System.out.println(mid);
            if(arr[right]<arr[mid]){
                left=mid+1;
            } else if(arr[right]>arr[mid]) {
                right=mid;
            } else{
                right--;
            }
        }
        System.out.println(arr[left]);
        return arr[left];
    }
    public static void main(String[] args){
        int[] arr={3,3,4,4,-1,1};
        findmin1(arr);
    }


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容