ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

有序数组中找到=num最左的位置

2022-03-02 12:34:58  阅读:143  来源: 互联网

标签:有序 int System 数组 middle num result ints out


    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            test();
        }
    }

    private static void test() {
        // 1、获取一个有序数组
        int i = ThreadLocalRandom.current().nextInt(100);
        int[] ints = ArraysUtils.getInts();
        Arrays.sort(ints);

        System.out.println("需要查找的数" + i);
        System.out.println(Arrays.toString(ints));

        // 2、定义左右边界
        int left = 0;
        int right = ints.length - 1;
        Integer result = null;
        // 3、定义终止条件
        while (left <= right) {
            // 3.1 二分取中间值
            int middle = (left + right) >> 1;

            int tmp = ints[middle];

            // 3.2 根据二分的中间值来分支,等于则找到,中间值大于查找值,则将范围往左移,剔除中间值这个位置;中间值小于查找值,则剔除中间值位置后往右切割
            if (tmp > i) {
                // -1是剔除中间值,由于是把右边界左移,所以是-1
                right = middle - 1;
            } else {
                // +1是剔除中间值,由于是把左边界右移,所以是+1
                left = middle + 1;
                result = middle;
            }
        }
        if (result == null) {
            System.out.println("没找着");
        } else {
            System.out.println("最左索引值"  + result);
        }
    }

与二分查找到指定值相比,这边的终止条件是二分到不能二分为止;然后最终取值是满足条件时候保存的索引值,这个值在每次中间值小于等于指定值的时候暂存的,每次满足条件的时候都会被替换。

标签:有序,int,System,数组,middle,num,result,ints,out
来源: https://www.cnblogs.com/gabin/p/15954493.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有