zl程序教程

您现在的位置是:首页 >  Java

当前栏目

二分查找法解题思路

2023-02-18 16:29:06 时间

二分查找法解题思路

每次从数组的中间,比较 需要找的 值,如果小于中位数,则在数组前一半找,如果大于,则在数组后一半找

* 1、首先二分查找法需要先排序

* 2、所以 传参是开始下标,结束下标,数组

* 3、必须先用首尾下标 计算出他的 中点下标

* 4、计算是否 大于中位数 或者 小于 中位数,执行 mid +1 或者 mid -1

 /**
     * 二分查找法接题思路
     * 每次从数组的中间,比较 需要找的 值,如果小于中位数,则在数组前一半找,如果大于,则在数组后一半找
     * <p>
     * 1、首先二分查找法需要先排序
     * 2、所以 传参是开始下标,结束下标,数组
     * 3、必须先用首尾下标 计算出他的 中点下标
     * 4、计算是否 大于中位数 或者 小于 中位数,执行 mid +1 或者 mid -1
     *
     * @param args
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String findStr = br.readLine();
        Integer arr[] = new Integer[str.length()];
        for (int i = 0; i < str.length(); i++) {
            arr[i] = Integer.valueOf(str.charAt(i));
        }
        Arrays.sort(arr);
        // 开始查找
        Integer index = getErFen(arr, Integer.valueOf(findStr.charAt(0)), 0, arr.length - 1);
        System.out.println(index);

        System.out.println();
    }

    private static Integer getErFen(Integer[] arr, Integer findStr, int start, int end) {
        while (start <= end) {
            int mid = (start + end) / 2;
            if (arr[mid] == findStr) {
                return findStr;
            } else if (arr[mid] < findStr) {
                start = 1 + mid;
            } else if (arr[mid] > findStr) {
                end = mid - 1;
            }
        }

        return -1;
    }