查找算法

二分查找

思想

找到中间值,再对比查找;通过不断移动中值,最后找到结果。

代码实现

// target是被查找值,num是被查找序列
int left = 1; // left取决于是索引还是第一个值,同理right也是
int right = num - 1;
int mid;
while (left <= right) {
    mid = left + (right - left) >> 1;
    if (mid == target) {
        // do something
    } else if (mid > target) {
        right = mid - 1;
        // do something
    } else {
        left = mid + 1;
        // do something
    }
}

发明一个并不朗朗上口的口诀以节省我拮据的脑容量:中值大右往左,中值小左往右。

例题

总结

  • 注意mid赋值应为mid= left + (right - left) / 2;,防止溢出;但在数组元素较少时可直接mid= (right + left) / 2;更简洁;
  • 在看374. 猜数字大小(Easy)题解时发现使用移位运算>>1会比除法/2快速,故可以更新mid= left + (right - left) / 2;mid = left + (right - left) >> 1;
  • 界限是left<=right,分情况取“=”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值