java算法之旋转数组的最小数字(二分法实现)

package 递归;

public class 旋转数组最小数 {
    
    


    /**
     * 旋转数组的最小数字(二分法实现)
     * @param args
     */

    public static void main(String[] args) {
    
    

        int[] arr = {
    
    3, 4, 1, 2};

        int n = min(arr);

        System.out.println(n);

    }

    private static int min(int[] arr) {
    
    

        int begin = 0;

        int end = arr.length - 1;
        //判断是否存在特殊情况

        if (arr[begin] < arr[end])
            return arr[begin];



        //begin和end指向相邻元素,退出

        while (begin + 1 < end) {
    
    

            int mid = begin + ((end - begin) >> 1);

            if (arr[mid] >= arr[begin]) {
    
    
                begin = mid;
            } else {
    
    
                end = mid;
            }
        }
        return arr[end];


    }

}

猜你喜欢

转载自blog.csdn.net/qq_42794826/article/details/108978244