代码随想录day1(1)数组:二分查找法(leetcode704)

二分法:判断某一target是否在此数组中,若在则返回下表,否则返回-1

二分法易错点:

1.while循环时究竟为left<right还是left<=right

2.更新区间时是middle还是middle-1

首先,对于区间的定义一般为左闭右闭或左闭右开[left,right] / [left,right)

左闭右闭:

left = 0

right = numsize-1

循环条件:(left <= right)(此时区间合法)

if(nums[middle] > target)  right = middle - 1(middle已经判断过不是,由于左闭右闭,应把区间缩小)

elseif(nums[middle] < target) left = middle + 1 (与以上相同)

else return middle

return -1

左闭右开:

left = 0

right = numsize(开,所以不用-1)

循环条件:(left < right)(此时小于才能使区间合法)

if(nums[middle] > target)  right = middle (middle已经判断过不是,由于右开,此时right = middle含义就是不包括middle,注意此处差别!!!)

elseif(nums[middle] < target) left = middle + 1 (注意差别!!middle不在,由于左闭,所以一定要+1)

else return middle

return -1

leetcode实战:

注意,此处求(right+left)/2的另一种写法

可防止溢出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值