二分法(力扣704)

对于二分法,我们先要搞定,到底是开区间还是闭区间,其次就是由于开闭区间的不同,会导致部分代码出现轻微区别。这是最关键最容易错误的!!!

详细的解释和代码在下面

         int left=0;//这是左闭
         int right=nums.size()-1;//这是右闭     如果是右开改为right=nums。size();
         while(left<=right){//注意由于是左闭右闭的区间,所以当左区间等于右区间的时候,就是数组中只有一个数的情况
             int mid=left+((right-left)/2);//注意不是(left+right)/2;并且如果这个耗时高的话,可以将“/2”改为“>>1"用位运算提高运算效率
             if(nums[mid]<target)left=mid+1;//如果是左开,就要把这里改为left=mid;因为左区间是取不到的
             else if(nums[mid]>target)right=mid-1;//如果是右开,就要把这里改为right=mid;因为右区间是取不到的
             else{ return mid;}
         }
         return -1;//如果找不到则返回-1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值