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

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

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

640.jpg

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


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


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

640.jpg

640.jpg

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


二分查找为什么总是写错?


https://www.bilibili.com/video/BV1d54y1q7k7

640.jpg

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


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


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

640.jpg

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

640.jpg

640.jpg

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

相关文章
|
3月前
|
算法
再探二分法
【2月更文挑战第5天】
31 3
|
4月前
蓝桥备战--纪念品分组OJ532,贪心证明
蓝桥备战--纪念品分组OJ532,贪心证明
14 0
|
8月前
校门外的树(三种解法,非直接暴力)
校门外的树(三种解法,非直接暴力)
|
9月前
|
算法
【过河卒】回溯算法保姆式解题
【过河卒】回溯算法保姆式解题
53 0
|
9月前
|
人工智能 Go
树状数组(包教包会,不会抽我)
树状数组(包教包会,不会抽我)
46 0
|
11月前
|
算法
【算法思维训练-剑指Offer联名 二】递归与循环篇
【算法思维训练-剑指Offer联名 二】递归与循环篇
66 0
|
12月前
|
算法 C语言
二分查找——我欲修仙(功法篇)
二分查找——我欲修仙(功法篇)
64 0
LeetCode每日一题(11)——太平洋大西洋水流问题(递归,深度优先遍历实例)
大西洋太平洋水流问题 1.题目 2.示例 3.思路 理解题目 解题思路 4.代码
112 0
LeetCode每日一题(11)——太平洋大西洋水流问题(递归,深度优先遍历实例)
|
存储 算法
学会二叉树不知道干啥?二叉树的深度优先搜索和广度优先搜索,我要打十个乃至二十个(打开你的LeetCode撸起来)学练并举
学会二叉树不知道干啥?二叉树的深度优先搜索和广度优先搜索,我要打十个乃至二十个(打开你的LeetCode撸起来)学练并举
学会二叉树不知道干啥?二叉树的深度优先搜索和广度优先搜索,我要打十个乃至二十个(打开你的LeetCode撸起来)学练并举
|
存储 移动开发 分布式计算
面试常见的四种算法思想,全在这里了
面试常见的四种算法思想,全在这里了,今天带你一文了解。
面试常见的四种算法思想,全在这里了