二分法——while等号

本文介绍如何运用二分查找法解决剑指offer中的二维数组查找挑战,通过实例解析二分查找的关键步骤与注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在做剑指offer    二维数组中查找问题

想用二分查找。废话不多说。

           int target = in.nextInt();
           int left = 0;
           int right = aa.length - 1;
           int mid = (left + right) / 2;

            while (aa[mid] != target && left < right) {
                if (aa[mid] < target)
                    left = mid + 1;
                else if (aa[mid] > target)
                    right = mid - 1;
                else {

                   return true;
                }
 //            mid = left + (left + right) / 2;
                mid = (left + right) / 2;
            }
            if (aa[mid] == target) {
                return true;
            } else {
                return false;
            }

这个版本里面,while里面没有 = 。例如在 数组 1,3,5,7,8,9里面找3.那么在while循环退出时,left, right 都指向值3,
left,right,mid都为索引 1。

即需要在while外面判断left==right 的情况。

第二种版本  代码量比较少 重要的地方就是while里面的判断条件需要改为left<=right
如下
int target = in.nextInt();
int left = 0;
int right = aa.length - 1;
int flag = 0;
while ( left <= right) {
    int mid = (left + right) / 2;
    if (aa[mid] < target)
        left = mid + 1;
    else if (aa[mid] > target) {
        right = mid - 1;
    }
    else{
        return true;
    }
}


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值