LeedCode 704二分查找

本文详细讲解了二分查找算法中区间定义的重要性,以及左闭右闭和左闭右开两种方法的区别,重点在于理解区间作为不变量在代码中的应用。
摘要由CSDN通过智能技术生成

先分析对区间的定义,才能把握while(left>right)还是while(left<right),right=middle-1还是right=middle,可以把区间的定义理解为不变量,一开始定义的区间左闭右闭,那后面也得坚持左闭右闭

左闭右闭写法

left = 0;
right = num.size-1;
while(left<=right)
middle=(left-nums.size)/2
if(nums(middle)>taget)
right=middle-1;
else if(nums(middle)<taget)
left=middle+1;
else return middle
return -1
 public int search(int[] nums, int target) {
        //避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算
        if(target <nums[0] || target > nums[nums.length-1]){
            return -1;
        }
        int left=0,right = nums.length-1;
        while(left<=right){
            int mid =left+((right-left)>>1);
                if(nums[mid] ==target)
                return mid;
                else if(nums[mid]<target)
                left = mid+1;
            
            else if (nums[mid]>target)
            right = mid-1;
        }
        return -1;
    }

左闭右开写法

left=0
right=nums.size-1
while(left<right){
middle=(left-nums.size)/2
if(nums[middle]>target)
else if(nums[middle]<target)
else return middle+1
}
return -1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值