![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 90
帅地
有问题不要私聊,太忙哈,可以关注我公众号。
展开
-
专门为学弟学妹写的十大排序算法(背诵版+动图+代码)
文章来源于:https://wwww.iamshuaidi.com,一个专注于校招,面试,面经的编程网站说明十大排序算法可以说是每个程序员都必须得掌握的了,如果你们像从 0 详细学习每一篇,那么你们可以看前面的文章。但是呢,有些人可能已经学过,想要快速复习一下,看看代码怎么写的,那么可以看这篇十大排序极简汇总,并且如果你想详细复习,也有对应的详细文章哦术语铺垫有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:1、稳定排序:如果 a 原本在 b 的前面,且.原创 2021-09-08 14:00:43 · 4683 阅读 · 4 评论 -
折腾了几个算法的奇技淫巧,我把面试官戏弄了一波,哈哈哈
来了,算法装逼骚技巧 ,大家先做好心理准备啊,待我教你们一步步装逼。1、2 的幂次方问题描述:判断一个整数 n 是否为 2 的幂次方对于这道题,常规操作是不断这把这个数除以 2,然后判断是否有余数,直到 n 被整除成 1 。我们可以把 n 拆成二进制看待处理的,如果 n 是 2 的幂次方的话,那么 n 的二进制数的最高位是 1,后面的都是 0,例如对于 16 这个数,它的二进制表示为 10000。如果我们把它减 1,则会导致最高位变成 0,其余全部变成 1,例如 10000 - 1 = 011原创 2021-05-21 22:21:15 · 2787 阅读 · 18 评论 -
又来了,学弟学妹把教材收起来吧,二叉堆看我这篇就妥了
面试官:写一个堆排吧我心想:堆排是什么鬼理解堆排,首先要理解二叉堆。理解了二叉堆的“下沉”操作,基本上就可以理解堆排了。今天我们来看一看什么是堆,以及堆的一般操作一、优先级队列近日,一尘遇到了烦心事,于是找老师去诉苦了一尘列了几个要做的事一尘道出了心中的苦慧能:你可以做优先级最高的事情,做完后删除它,然后做剩下优先级最高的事,当然,很有可能有其他事插入进来,新插入的事情如果优先级不是最高,就不做,这样你就一直做优先级最高的事了接着慧能顺手画了一个图优先级队列中每个.原创 2021-04-28 13:57:23 · 3581 阅读 · 28 评论 -
各位学弟学妹,别再看教材了,时间复杂度看这篇就好了
时间复杂度是学习算法的基石,今天我们来聊聊为什么要引入时间复杂度,什么是时间复杂度以及如何去算一个算法的时间复杂度一、刻画算法的运行时间某日,慧能叫来了一尘打算给他补习补习一下基础知识,只见克写了一段非常简单的代码一尘看老师有点生气,开始虚心请教了为了方便讨论,这里我们把每一条语句的执行时间都看做是一样的,记为一个时间单元① 蓝色框的两条语句,花费两个时间单元②黑色框的一条语句,花费n+1个时间单元③红色框的两条语句,花费2*n个时间单元这不是.原创 2021-04-26 15:47:24 · 149428 阅读 · 224 评论 -
漫画:以后有面试官问你快速排序,你就干脆把我这篇熬夜写的文章扔给他!
这篇文章,以对话的方式,详细着讲解了快速排序以及排序排序的一些优化。一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理子问题。我弄个例子吧,好理解点。例如对于这个数组arr[] = { 4,1,3,2,7,5,8,0}。我们把它切割成两部分。把左半部分和右半部分分别排序好。之后再用一个临时数组,把这两个有序的子数组汇总成一个有序的大数组排好之后...原创 2020-03-21 12:14:37 · 6242 阅读 · 5 评论 -
【带你装逼带你飞】吐血总结了这五大常用算法技巧,让你在同事/面试官面前惊艳全场!
实不相瞒,好久没有写原创算法文章了,一方面自己一直在学习别的知识,时间比较少。不过我还是每天保持更文,并且发的每一篇文章,也都是经过筛选的,质量都是挺不错滴,不会随便乱转。对于算法技巧,之前的文章也写过一些算法技巧,不过相对零散一些,今天我把之前的很多文章总结了下,并且通过增删查改,给大家总结一些常用的算法解题技巧,当然,这些也不是多牛逼的技巧,不过可以让你的代码看起来更加短小精悍,如果你能够充...原创 2020-02-27 12:10:27 · 10012 阅读 · 5 评论 -
一个故事讲完哈希洪荒攻击,看不懂你打我
生意红火有一天你和你的邻居同时开了一个快递驿站,不过你的运气很好,每天都有很多快递到你这里来,生意红红火火,然而,你的邻居生意很冷清。快递一多,为了取件人方便找到快递,于是你按照快递手机号码的最后两位数字来给快递分类,例如尾号为 01 的放到柜子 1 中,尾号为 02 的放到柜子 2 。如果有人来取快递,他只需要报出他的手机号码,就可以快速找到对应的柜子,然后再根据完整的手机号码在这个柜子里找...原创 2020-02-21 13:08:16 · 8236 阅读 · 8 评论 -
记一次阿里面试,我挂在了 最熟悉不过的LRU 缓存算法设计上。。。。。
最近春招提前批也要打响了,我会在推送算法+计算机基础的文章下,尽快推一些面试相关的文章大概是去年的三月份,在找春招实习的时候,面了一次阿里,然后第一面就是写算法题,然而万万没有想到的是,我居然挂在了 LRU 缓存算法上了,这可是我再熟悉不过的算法。。。。。。。今天就来分享一波,说不定,你也做不出!一、勤于动脑,懒于行动的祸当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least re...原创 2020-02-12 13:14:56 · 11250 阅读 · 7 评论 -
牛逼!一行代码居然能解决这么多曾经困扰我半天的算法题
春节假期这么长,干啥最好?当然是折腾一些算法题了,下面给大家讲几道一行代码就能解决的算法题,当然,我相信这些算法题你都做过,不过就算做过,也是可以看一看滴,毕竟,你当初大概率不是一行代码解决的。学会了一行代码解决,以后遇到面试官问起的话,就可以装逼了。一、2 的幂次方问题描述:判断一个整数 n 是否为 2 的幂次方对于这道题,常规操作是不断这把这个数除以 2,然后判断是否有余数,直到 ...原创 2020-01-31 13:28:24 · 31094 阅读 · 52 评论 -
【超详细图解】字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?
关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多。至于选择哪一种字符串匹配算法,在不同的场景有不同的选择。在我们平时文档里的字符查找里采用的就是 Boyer-Moore 匹配算法了,简称BM算法。这个算法也是有一定的难度,不过今天,我选用一个例子,带大家读懂这个字符...原创 2019-12-08 19:17:16 · 5212 阅读 · 1 评论 -
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生…面试官开怼面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...原创 2019-11-27 11:43:00 · 23192 阅读 · 40 评论 -
【干货】数据结构与算法该如何正确学习?(书籍\视频\网站都推荐了)
对于初学者来说,我认为选择一本合适、不错的算法书是非常非常重要的,从大一到现在我也看过不少的算法书,当然在学习算法的过程中也走过不少坑,刷了很少题,总结了不少经验,下面说说我的一些经验吧,请耐心看完,相信一定对你有所帮助。书籍视频推荐小白入门:书单、视频推荐数据结构与算法相关的书籍应该是我看的最多的一种数据吧,从大一到现在,从未间断过,下面就介绍下从大一到现在都看过哪些自认为优秀的书籍,注...原创 2019-11-22 16:24:12 · 7362 阅读 · 7 评论 -
分享一道解法巧妙的算法题
最近碰到很多通过巧妙着运用位运算来巧妙解决复杂问题的算法,今天分享的这道题,或许能够开拓你的一些算法思维。题目描述有一组存放 ID 的数据。并且 ID 取值为 0 - (N-1) 之间,其中只有一个 ID 出现的次数为 1,其他的 ID 出现的次数都等于 2,问如何找到这个次数为 1 的 ID ?解法一:巧用数组下标不知道有多少人还记得我之前分享的巧用数组下标的技巧:一些常用的算法技巧总结...原创 2019-11-19 12:25:09 · 2880 阅读 · 1 评论 -
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。判断奇偶数判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...原创 2019-11-18 13:36:09 · 60215 阅读 · 88 评论 -
记一道字节跳动的算法面试题
前几天有个朋友去面试字节跳动,面试官问了他一道链表相关的算法题,不过他一时之间没做出来,就来问了我一下,感觉这道题还不错,拿来讲一讲。题目这其实是一道变形的链表反转题,大致描述如下给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间为一组进行逆序,并且从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。(不能使用队列或者栈作为辅助)例如:链表:1->...原创 2019-11-14 10:42:44 · 3205 阅读 · 3 评论 -
【图解动态规划】用大量图片告诉你动态规划改如何优化?
前两天写一篇长达 8000 子的关于动态规划的文章告别动态规划,连刷40道动规算法题,我总结了动规的套路这篇文章更多讲解我平时做题的套路,不过由于篇幅过长,举了 4 个案例之后,没有讲解优化,今天这篇文章就来讲解下,对动态规划的优化如何下手,并且以前几天那篇文章的题作为例子直接讲优化,如果没看过的建议看一下(不看也行,我会直接给出题目以及没有优化前的代码):告别动态规划,连刷40道动规算法题,我...原创 2019-11-13 23:41:16 · 3584 阅读 · 0 评论 -
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。3、它的左右子树也分别可以充当为二叉查找树。例如:例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...原创 2019-11-10 10:27:39 · 18314 阅读 · 22 评论 -
【图解】以后有面试官问你跳跃表,你就把这篇文章扔给他
假如我们要用某种数据结构来维护一组有序的int型数据的集合,并且希望这个数据结构在插入、删除、查找等操作上能够尽可能着快速,那么,你会用什么样的数据结构呢?数组一种很简单的方法应该就是采用数组了,在查找方面,用数组存储的话,采用二分法可以在 O(logn) 的时间里找到指定的元素,不过数组在插入、删除这些操作中比较不友好,找到目标位置所需时间为 O(logn) ,进行插入和删除这个动作所需的时...原创 2019-11-08 13:35:10 · 4537 阅读 · 20 评论 -
二分查找你确定真的会?生活中还能用来设计骗局?
期末考要来了,最近小秋正在从零开始复习算法相关知识…一道简单的算法题帅地:听说你最近正在临时饱佛教复习各种算法?小秋:对啊,算法太难了,把我头都搞大了,不过,感觉自己复习的好像还不错。帅地:那我找一道简单的题考考你?小秋:好啊,好啊,正好可以试试水。帅地:给你一个有序数组,例如然后我给出一个元素 target,你返回它对应数组的下标,如果数组中不存在这个元素的话,则返回 -1。例如...原创 2019-11-07 11:05:15 · 2054 阅读 · 0 评论 -
大学四年,小白一路走来,分享一波我是如何学习、提高自己的算法
大一从一个小白一路走过来,也在 leetcode 刷了几年了题,也是有点经验,也走过很多坑,在此分享我的一波经验,请耐心看完一定会有所帮助。切勿盲目刷题:刷题前的知识积累说实话,想要提高自己的算法,我觉得就是脚踏实地着多动手去刷题,多刷题。但是,如果你是小白,也就是说,你连常见的数据结构,如链表、树以及常见的算法思想,如递归、枚举、动态规划这些都没学过,那么,我不建议你盲目疯狂着去刷题的。而...原创 2019-11-01 19:53:28 · 6673 阅读 · 7 评论 -
别翻了,程序员必学十大经典排序算法,看这篇就够了
说明十大排序算法可以说是每个程序员都必须得掌握的了,花了一天的时间把代码实现且整理了一下,为了方便大家学习,我把它整理成一篇文章,每种算法会有简单的算法思想描述,为了方便大家理解,我还找来了动图演示;这还不够,我还附上了对应的优质文章,看完不懂你来砍我,觉得不错就给我来个好看。术语铺垫有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:1、稳定排序:如果...原创 2019-10-31 12:15:59 · 8448 阅读 · 17 评论 -
为什么你学不会递归?告别递归,谈谈我的经验
可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了!可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么使用,有时候还容易被递归给搞晕。也有好几个人来问我有没有快速掌握递归的捷径啊。说实话,哪来那么多捷径啊,不过,我还是想写一篇文章,谈谈我的一些经验,或许,能够给你带来一些帮助...原创 2019-10-28 23:58:03 · 177576 阅读 · 175 评论 -
二分法题型小结
在刷题的过程中,二分法用的还是挺多的,有时候超时了往往是你没有用上二分法,今天我就来稍微总结下用的最多的三种二分法搜索。一、搜索和目标值相等的数这一类是最简单的,例如对于数组 arr = {1, 2, 5, 6, 9},要我们搜索返回目标数 target = 6,这个时候我们需要返回 6 的下标 i = 3。代码如下int binarySearch(int[] arr, int target...原创 2019-10-26 13:59:31 · 3016 阅读 · 4 评论 -
大学四年,看过的优质书籍推荐
有时有些读者问我,数据结构与算法该怎么学?有书籍推荐的吗?Java 初学者该怎么学等等。今天我就给大家介绍一些我这几年看过的一些自认为优秀的书籍,由于我看的大部分书籍可以说都是通用的,所以如果你有时间的话,还是挺建议看看的,特别是学生。而且,我还给大家准备好了电子书,文末即可获取,感觉自己太良心!数据结构与算法数据结构与算法相关的书籍应该是我看的最多的一种数据吧,从大一到现在,从未间断过,下...原创 2019-10-22 16:28:07 · 44769 阅读 · 79 评论 -
为有机会进大厂,程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...原创 2019-12-26 17:54:22 · 704568 阅读 · 414 评论 -
【图解二叉堆】以后有面试官问你二叉堆,你就把这篇文章扔给他
二叉堆是一种应用很广的数据结构,今天,我们就来简单讲讲二叉堆。什么是二叉堆?二叉堆是一种特殊的堆。具有如下的特性:具有完全二叉树的特性。堆中的任何一个父节点的值都大于等于它左右孩子节点的值,或者都小于等于它左右孩子节点的值。根据第二条特性,我们又可以把二叉堆分成两类:1、最大堆:父节点的值大于等于左右孩子节点的值。2、最小堆:父节点的值小于等于左右孩子节点的值。我们把二叉堆...原创 2019-10-19 11:56:05 · 3214 阅读 · 0 评论 -
别在学习框架了,那些让你起飞的计算机基础知识。
我之前里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机制。当然,在面试中也经常会被问到,特别是对于应届生,对于春秋招,也可以看看我前阵子写过的文章历经两个月,我的秋招之路结束了!。也有读者经常问的计算...原创 2019-10-22 12:00:51 · 87867 阅读 · 89 评论 -
leetcode 刷500道题,笔试/面试稳过吗?谈谈算法学习
想要学习算法、应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗?这里我说下我的个人看法,我认为不稳。下面说说为啥不稳以及算法题应该如何刷、如何学才比较好,当然,也会推荐自己学过的资料。一、先说说笔试题在刷 leetcode 的时候,你会发现,每道题的题意都很短,你只需要花十几秒的时间,就...原创 2019-10-08 17:35:34 · 5099 阅读 · 0 评论 -
历经两个月的秋招,结束了,谈谈春秋招中一些重要的知识点吧(本科+后台+腾讯)
历经两个月的秋招总算是结束了,从七月份开始复习秋招相关知识,到八月多开始笔试、面试,到九月下旬的秋招结束,在笔试面试的这两个月里,还是挺累的。这篇文章就说说秋招这段时间的收获以及给对于明年要参加秋招的同学的一些建议吧。一、最后去的公司对于我来说,这次秋招算是满意的吧,找到了想去的城市(深圳)以及公司(腾讯),我投的岗位都是后端开发。在之前春招找实习的时候,人生的第一次献给了腾讯,那时候没啥面试...原创 2019-10-07 20:20:50 · 3042 阅读 · 7 评论 -
让你可以装逼的算法技巧总结
今天和大家讲讲,在做算法题时常用的一些技巧。对于平时没用过这些技巧的人,或许你可以考虑试着去看看在实践中能否用的上这些技巧来优化问题的解。1. 巧用数组下标数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候,如果字母a遍历到,则arr[a]就可以加1了,即 ...原创 2018-12-11 19:27:44 · 8150 阅读 · 11 评论 -
我是如何学习数据结构与算法的?
数据结构与算法的地位对于一个程序员来说不言而喻。今天这篇文章不是来劝你们学习数据结构与算法的,也不是来和你们说数据结构与算法有多重要。主要是最近几天后台有读者问我是如何学习数据结构与算法的,有没有什么捷径,是要看视频还是看书,去哪刷题等…而且有些还是大三大四的,搞的我都替你们着急、担心…所以我今天就分享下自己平时都是怎么学习的。学习算法的捷径就是多刷题说实话,要说捷径,我觉得就是脚踏实地着...原创 2018-10-24 16:25:02 · 7966 阅读 · 1 评论