二分算法,你思考过这些问题吗?

本文探讨了二分查找算法的重要性,指出即使在90%的程序员中普遍存在错误实现的情况。文章通过讲解二分查找的原理,强调了分治策略在解决问题中的应用。并介绍了递归和非递归两种实现方式,特别强调了边界条件的处理,以及在不同变型题型中的应用。此外,还提到了二分答案法在寻找最优化解中的作用,总结了使用二分查找时的关键注意事项和结束条件的设定。
摘要由CSDN通过智能技术生成

**Jon Bentley:**90%以上的程序员无法正确无误的写出二分查找代码。
Jon Bentley:在贝尔实验室和IBM 的时候都出过这道考题。那些专业的程序员都认为自己写出了正确的程序。于是,我们花了半个钟头来用测试用例验证他们的代码。一百多人中有90%的程序员写的程序中有bug

一个更惊人的事实是,二分查找算法的论文在1946年就发表了,但第一个没有错误的程序直到1962年才写出来。

直到今日,字节跳动等大公司的面试也经常考查二分查找。虽然二分查找的思路非常简单,就是通过不断通过有序数组的中间项与查找target 进行比较,可以排除数组一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到target,时间复杂度为logN。

思路看起来很简单,但是大厂多次考察的原因是什么呢?

面试者非常容易写错二分查找的边界条件,尤其对于二分查找变种题型。这篇文章教会你写边界条件的通用思考方式,适用所有变种题型,不需要死记硬背。学会之后,面试前再看一遍,保证顺利bug-free。

小伙伴们有兴趣想了解更多相关学习资料请点赞收藏+评论转发+关注我之后私信我,注意回复【000】即可获取更多免费资料!

 

01. 分治

二分法是分治(divide and conqer)的一种特例,本质上是为了将大问题分解成更小的问题,而二分法是恰好将问题规模减少为原来的一半。

我们拿到一道新题,第一想法不是想能不能用二分法解决,而是想能不能用分治法解决,将大问题拆解成子问题解决?如果整个问题是有序的,并且子问题恰好能将规模减少为原来的一半,思路就导向了二分法。

如果发现子问题是有冗余的,思路就导向了动态规划,详细见刷题有术--动态规划 必备知识二分法一些明显标志:有序数组;区间范围,单调性逼近。

02. 二分查找

二分查找也叫二分搜索,有递归和非递归两种写法。面试推荐非递归写法,因为方便确定边界条件写法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值