二分查找法解题思路

简介: 二分查找法解题思路

二分查找法解题思路

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


* 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;
    }
相关文章
|
6月前
|
算法
动态规划的思路
动态规划的思路
|
6月前
代码随想录 Day46 动态规划14 LeetCode T392 判断子序列 T115 不同的子序列
代码随想录 Day46 动态规划14 LeetCode T392 判断子序列 T115 不同的子序列
62 0
|
5月前
|
存储 算法 数据挖掘
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组
|
6月前
|
算法 测试技术 C#
[二分查找双指针]LeetCode881: 救生艇
[二分查找双指针]LeetCode881: 救生艇
|
算法 编译器 Go
【LeetCode 算法专题突破】双指针(⭐)
【LeetCode 算法专题突破】双指针(⭐)
49 0
|
算法 测试技术 API
【二分查找】二分查找算法练习题
【二分查找】二分查找算法练习题
|
算法
力扣704二分查找:思路分析+代码实现(递归与非递归)
力扣704二分查找:思路分析+代码实现(递归与非递归)
131 0
[LeetCode算法->双指针]
1.给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 解析:这道题可以通过双指针来求解,即给定i和j,分别指向0位置和numsize -1的位置, 比较两个指针所指向的元素的平方的大小,大的逆序放在要返回的数组中。为什么要逆序呢? 由于已知数组是非递减顺序排序的: 假如输入的数组全是非负数,那么平方后也是一个递增顺序。 假如输入的数组全是负数,那么平方后是一个递减的顺序。 假如输入的数组有负数,有非负数,那么平方后的情况就尾部是递减或递增的。 所以逆序存放平方后大的元素,就不再需要讨论上面的情况。
|
算法 Java 索引
【算法题解】 Day26 双指针
今天的算法是 「双指针」 相关,“算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,以实战习题的形式理解算法,使用算法。”
87 0
LeetCode每日一题题解-1748题. 唯一元素的和-解题思路
LeetCode每日一题题解-1748题. 唯一元素的和-解题思路