学习笔记-二分查找

二分查找:

二分查找的前提必须是一个有序的数组

这里提供两个代码一个是查找一个值的一下标,另一个是查找一个值的一下标

 /**
     * 二分查找      注意:前提是该数组是有序的
     * @param arr 查找的数组
     * @param left 左边索引
     * @param right 右边索引
     * @param value 要查找的值
     * @return 要查找的下标
     */
    public static int binarySearch(int[] arr, int left, int right, int value) {
        if (left > right) {
            return -1;
        }
        //mid中值
        int mid = (left + right) / 2;
        int midValue = arr[mid];
        if (value > midValue){
            //向右递归
            return binarySearch(arr, mid + 1, right, value);
        }else if(value < midValue) {
            //向左递归
            return binarySearch(arr, left, mid -1, value);
        }else {
            return mid;
        }
    }

    /**
     * 二分查找      注意:前提是该数组是有序的
     * @param arr 查找的数组
     * @param left 左边索引
     * @param right 右边索引
     * @param value 要查找的值
     * @return 要查找的下标list
     */
    public static ArrayList lBinarySearch(int[] arr, int left, int right, int value) {
        if (left > right) {
            return new ArrayList<Integer>();
        }
         //mid中值
        int mid = (left + right) / 2;
        int midValue = arr[mid];
        if (value > midValue){
            //向右递归
            return lBinarySearch(arr, mid + 1, right, value);
        }else if(value < midValue) {
            //向左递归
            return lBinarySearch(arr, left, mid - 1, value);
        }else {
            ArrayList<Integer> al = new ArrayList<>();
            int temp = mid - 1;
            while (true){
                if (temp < 0 || arr[temp] != value) {
                    break;
                }
                al.add(temp);
                temp -= 1;
            }
            al.add(mid);
            temp = mid + 1;
            while (true){
                if (temp > arr.length - 1 || arr[temp] != value) {
                    break;
                }
                al.add(temp);
                temp += 1;
            }
            return al;
        }
    }
原创文章 23 获赞 23 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Shine_QianMo/article/details/106033925