热门
join now

【原创】【算法之旅】二分查找法

编程相关2周前更新 云程
17 0 0

这应该算是最简单的算法之一了,不需要任何先备知识,属于是零门槛也能学习的算法

让我们从一个生活中的例子说起:

如果让你用字典查一个字,你会从第一页开始翻,还是按偏旁部首从对应位置翻开呢

我想正常都会选择后者吧,毕竟字典会有【规律】的归纳文字,这里强调的是规律(如果是毫无顺序的排列,那么二分法就没用了)

❤️概念
二分法字如其意,就是把事物分成两半

比如猜数字,让你猜1-100之间任意一个数字,最快的方法是什么呢?

答案是从50开始猜,如果大了,那么大于50的肯定也大,那就从25开始猜下一组

反之,如果小了就从75开始

换句话说,每次都【取一半】,这样就能排除另一半,从而快速压缩范围

🧡小争论:二分法一定快吗?

有人可能会说,“那万一答案是1,用二分法却从50开始猜,这不反而慢了吗?”

首先快慢是个相对的概念,如果你持有上面的想法,那我也可以这样说:那答案是99从1开始数不是更慢吗?

❤️正确的态度
所以说要辩证看待:如果没有完美的方案,那退而求其次,选择大部分情况都能最快解答的方案

❤️例题
接下来通过题目来看看二分法如何应用到程序中

要求如【图一】,解答为【图二】,建议各位读者先行思考再看答案,看看是否掌握了二分法

当然,这题也可以使用暴力算法,即遍历整个数组一一判断,但是部分题目会运行超时,同时这种做法效率底下,不建议过分依赖

我们来提交下看看【图三】

❤️变式例题
我们来看看特殊情况,即多个答案的情况下只能选靠前(或靠后)的那个

需求【图四】,解答【图五】,提交【图六】

其实不难处理,我们只需要把本来直接返回的索引归到需要我们优先选择的那边,最终返回即可

🧡最后带大家来看看榜单大神们
【图七】【图八】

🧡对了,这个系列的编程语言不会固定,我会选择个人觉得写题比较舒服的语言,同时也希望各位摆脱语言的束缚

因为算法的核心本身就是【思想】,当你掌握了思想,用什么语言实现都是信手拈来了

那么本期就到此结束啦

我个人也推崇循序渐进的学习方式,所以文章不会一上来就带一大堆公式或概念,希望本文能对你有所帮助[玫瑰]

[彩虹]pluie
[彩虹]2023-05-13

【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法
【原创】【算法之旅】二分查找法

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...