二分查找学习笔记

通过学习后,我写的二分查找基本代码如下:

public static int search(int[] nums, int target) {
    int min = 0;
    int max = nums.length;
    int mid = (min + max) / 2;
    while (nums[mid] != target) {
        if (target > nums[mid]) {
            min = mid + 1;
        }
        if (target < nums[mid]) {
            max = mid - 1;
        }
        if (min > max) {
            return -1;
        }
        mid = (max + min) / 2;
    }
    return mid;
}

但当我做相应的练习的时候,有这样一个案例:nums={-1,0,3,5,9,12},target=13;target大于nums中最大的数字12,输入这样的案例之后,编译器报错。经过debug后发现,到了最后,max=min,并不满足min>max这个条件。所以没有找到时,if语句应该为:if(min>=max).

       但经过我的这样修改之后,我发现当target=9的时候,反而一般案例的时候,返回值却是-1.最后总结得出,if(min>max)语句是正确的,我们可以在最开始做个判断:将nums的最大值和最小值与target做一个判断,如果taget大于最大值或小于最小值的话,直接return -1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值