vlambda博客
学习文章列表

请收下今日份的编程技巧速递(二分查找和递归)

最近有个读者朋友在我的技术交流群问了一个关于二分查找的问题,具体题目如下。



如果你是第一次接触这个问题,能够写出答案,那我觉得你堪称天才了。


接触过这个问题的朋友对解决方案可以脱口而出,使用二分查找。计算机科班出身的同学在教科书上已经学习过二分查找的算法了,在一个已经排好序的无重复数值的数组寻找某个数。但是当我们着手解决各种二分查找算法问题时,经常会写出死循环和数组越界的代码。


网上有不少二分查找的模板,可以分为三大类。

请收下今日份的编程技巧速递(二分查找和递归)

请收下今日份的编程技巧速递(二分查找和递归)

三个模板,记忆力再好,也有可能初一记得,十五就忘了。有没有一套模板就能搞定的呢?还真让我在bilibili上找到了。代码很简单,比教科书上找某个确定值还要简单。


二分查找为什么总是写错?
https://www.bilibili.com/video/BV1d54y1q7k7

请收下今日份的编程技巧速递(二分查找和递归)


视频上的弹幕基本都是,牛逼,厉害,完美之类的赞叹。颇有几分相见恨晚的意思,更有几分要是早有人告诉这么解二分查找的问题,我就不会丢分之类的感觉。


但是思路好归好,你一个籍籍无名的B站up主的算法思路,无法不让人产生怀疑。效率能行吗?解法主流吗?能否经得起各种case的考验


结果有一天我在medium上发现了kotlin项目leader发的一篇类似的文章。内容几乎一样。有了大佬的加持,我深信这套代码没问题,肯定不是无中生有的了。

请收下今日份的编程技巧速递(二分查找和递归)


Programming Binary Search
https://elizarov.medium.com/programming-binary-search-6e999783ba5d


最后在评论区发现了一个知识盲区, tail recursion,一个读者用递归的形式解决了这个问题,然后用了kotlin的特性 tailrec将递归转成迭代方式




然后我找到了关于尾部递归的资料,大家感兴趣可以看看。

Tail Recursion Explained - Computerphile
https://youtu.be/_JtPhF8MshA

Tail Recursion in Kotlin
https://medium.com/swlh/tail-recursion-in-kotlin-7585b5357e70


最近身体抱恙,需要时间多休息休息,文章就基本搁置了。本文也没有好好润色,大家将就看吧。把文中这几篇文章看完,相信对编程技巧提升肯定是有帮助的。