二分查找练习(1)— 查找数组中>=num的最左位置

上一篇博客中简单的使用了二分查找法在数组中找num。
在这篇博客中,会根据上次的二分查找再次提升一些难度,在数组中找到大于等于num的最左端的位置。
举例:在有序数组 [0,0,1,1,1,2,2,4,5,6,7,8,9,9]中,找到 >=2的最左端的数。肉眼观察,应该是数组下标为5的位置。
那么,如何使用二分查找来实现呢?

 public static int findMostLeftNoLessNumIndex(int[] arr, int num) {
        if (arr == null || arr.length == 0) {
            return -1;
        }

        int start = 0;
        int end = arr.length - 1;
        int t = -1;

        while (start <= end) {

            int middle = (start + end) / 2;
			//如果中间位置数刚好 >= num,那么代表右边的所有数都会比num大,
			//所以舍弃右边的数,从左边再次查找
            if (arr[middle] >= num) {
                t = middle;
                end = middle - 1;
            } else {
            //如果middle < num,说明左侧数都会比num小,同理,从右侧查找
                start = middle + 1;
            }
        }
        return t;
    }

还可以练习查找<=num中最右端的数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值