没有合适的资源?快使用搜索试试~ 我知道了~
首页算法与数据结构入门指南:Java实现详解
算法与数据结构入门指南:Java实现详解
需积分: 9 0 下载量 21 浏览量
更新于2024-07-15
收藏 90.57MB PDF 举报
《cxyngxl-V1.0》是一本全面介绍数据结构与算法的电子书籍,由作者帅地撰写,他是一名后台开发工程师,通过自己的博客积累了丰富的经验。本书涵盖了十个基础数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图和Trie树,以及十个核心算法,包括递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划和字符串匹配算法。作者强调,掌握这些基础知识对于理解更复杂的概念至关重要,因为它们构成了计算机科学的基石。 书中内容旨在帮助读者建立坚实的理论基础,无论将来从事哪个方向的IT工作,如后台开发、前端开发或人工智能,这些技能都能提供广泛的支持。作者特别提到,对于求职者来说,尤其是应届毕业生,算法、数据结构和计算机基础知识是面试官关注的重点。他分享的许多算法在知乎、CSDN等平台上广受好评,例如动态规划问题就曾获得4000多赞,并得到了读者的感谢。 此外,作者提供了Java版本的代码实现,即使没有Java基础的读者也能理解。书中强调,尽管各知识点之间没有严格的阅读顺序,但读者可以根据自己的兴趣和需求自由选择学习路径。这本书旨在帮助读者提升计算机技能,深入理解算法原理,并鼓励他们将所学知识分享给更多的人,以此作为对他们学习的支持。 综上,阅读《cxyngxl-V1.0》不仅能提升个人技术实力,还能为求职和职业发展增添竞争力。无论是为了学术研究还是职业成长,这都是一本值得投入时间和精力去深入学习的宝贵资源。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/12610714/bg10.jpg)
还有吗?有,如刚才是求最和,现在我改成求最乘积。
我举上这些,就是想告诉你,对于前期的学习,我建议分类刷题,总结题型,像我上举的这些
,在笔试/试中还是较常的,如果你懂得对应的法,就可以秒杀,因为这类题,没啥边界
或者规。如我刚才距离的Shopee的零柜那道题,实际上就是数组切割题型,相当于给你个数
组,让你切割 n 下,那么可以把数组切割成 n + 1 个数组,怎么样切割,才能让最数组的和最
?
关于题型的,还是很多的,我这法给你举,只能靠你刷题的过程中,进分类、总结。过
我可以给你推荐些资,后推荐哈。下我在说些题型吧。
(2)、基本数据结构操作相关题型
刚才我说,笔试题的考察,有类题是基本数据结构的考场,且,这类题在试中,也是频考
点,在笔试中,倒是很频。对于这类题,我觉得你愿意去总结,那么以后遇到,问题。如
链表的各种操作:逆序(部分逆序、按某种条件逆序)、判断是否有环,环的节点、删除指定节点
等。
叉树的各种操作:各种递归的遍历操作(前中后、层)、叉树的公共祖先、根据前中后的遍历结
果来重构叉树等等。
队、栈相关操作:最栈、来队来实现栈等。
(3)、字符相关问题
得说,字符相关问题,估计考的最频,且,我可以告诉你,对于字符相关问题,90% 可以
动态规划来解决。反正对于字符问题,我般想法就是能否套动态规划,字符问题有点多,
过你有时间,建议总结。如:通配符的匹配、最公共、最编辑代价、最回等等。部
分都是动态规划,且,我觉得解法都差多,所以强建议专花段时间来做、总结、归纳。后
我也会写这的算法章,敬请期待。
2、多思考/动,提的思维完整性/灵性
(1)、边界、找规题型
刚才我说有类题型是边界特别多的,对于这类题,我觉得好总结,这类题考察你逻辑是否严谨,能
否化繁为简。这我建议多做道,做的时候,多思考,千万要觉得知道思,怎么
写,只是情况太多,懒的写,直接看别的答案,这样,这道题你做价值,因为这类题就是考
察你思维完整性的,最好是做,可能你 个 if 语,没关系。接着你可以把你的 if 语进
化简,查找他们的共同点。最后你可以看佬们的做法,你的收获会!
对,也千万别急着动写,应该想想可性,然你容陷底深渊。
对于找规的题型也是样,这类题最后别急着看答案,应该多思考,多做道,做多,你的思维会
越来越灵,以后看到这类型的题,可以很快有思。
所以,对于这种边界、规题,个感觉总结的价值是特别,多的是多思考,多动。
注意:每道题,我们都要追求最优解哈,别觉得 ac 就完事。
三、我看过的些资
![](https://csdnimg.cn/release/download_crawler_static/12610714/bg11.jpg)
上说那么多,可能有是道我都懂,可我还是学会,说实话,学习的法有很多,每个的学
习法也都样,我这也只是提供种参考。但是,论么法,你去动执,那么,切
都是空话。
这我推荐些我看过的书,感觉挺错。
中涉及到的书籍以及视频,在我的微信公众号:帅地玩编程,回复『算法学习』即可获取
1、书籍推荐
刚才我说很多种题型,对于按题型刷题总结,推《程序员代码试指南:IT名企算法与数据结构题
最优解》,这本书真的挺错,部分题型都总结,且每个专题有道,这建议家买
本来学习。
还要本我看的,感觉也挺错,叫做《挑战程序设计赛》,过这本较适合急着试的
吧,这本像上那本,专来总结各种题型应付试。
《编程之美》、《编程珠玑》也建议看,这两本我觉得较有趣,是说让你直刷题直刷题,这两
本你可以买来看看,会给你带来些思,这两本我是只看,没动打代码。
Leetcode 刷题的时候,也是可以分题型刷滴,所以也可以去 leetcode 刷题,过刷题的时候,我这
有个建议,就是别在本地 IDE 写代码,直接在端写就。因为试的时候,般就让你在记事本
写代码,会给你 IDE。如果你习惯,估计很容写错代码,且,有些库函数你也把名字忘记。
端其实也是挺的,也会有些代码提示。
对于,对于连各种算法思想、数据结构都还懂的同学,上的数据合适哈,推荐我看过的
两本书《数据结构与算法分析 — C 语描述版》、《算法设计与分析基础》(这本代码实现是
伪代码的)。
2、视频推荐
说时候,我视频看的多,对于算法的学习,特别是刷题,我是习惯看视频,如果你想看视频,我
觉得客的算法视频还错吧,我没过集,分初级班和进阶班。其他的我也没看过,所以这可以
推荐的多。
四、总结
回到标题,leetcode 刷 500 道题稳吗?说实话,你能坚持刷 500 道题,说明你的能还是挺强的,但
是对于笔试,我觉得定稳,得看你怎么做,如是否追求最优解,是否进总结归纳,还是说你只
是 ac 之后就,或者敢跳出舒适区,是做那些本来就较擅的题,遇到
弱的题,上就看答案。且我说,有些题是找规或者边界很多的,这类题需要你多思考、动
,是说我多刷道就可以。
总之,对于刷题,千万别追求数!
上的做题法,定适合每个,只是我的学习以及建议,供家参考。想要获取上那些
资的,可以在我的公众号 帅地玩编程 回复『算法学习』即可获取。
今天是国庆最后天,家也玩够,所以接下来,就要好好学习,先把的硬实提升起来。在
后,我也会多写些算法题,如动态规划,回溯,递归等。
学习多算法 + 计算机基础知识,欢迎关注我的微信公众号,每天准时推送技术货
![](https://csdnimg.cn/release/download_crawler_static/12610714/bg12.jpg)
学递归
为么你学会递归?告别递归,谈谈我的些经验
可能很多在的时候,就已经接触递归,过,我敢保证很多初学者刚开始接触递归的时
候,是脸懵逼的,我当初也是,给我的感觉就是,递归太神奇!
可能也有部分知道递归,也能看的懂递归,但在实际做题过程中,却知道怎么使,有时候还
容被递归给搞晕。也有好个来问我有没有快速掌握递归的捷径啊。说实话,哪来那么多捷径啊,
过,我还是想写篇章,谈谈我的些经验,或许,能够给你带来些帮助。
为兼顾初学者,我会从最简单的题讲起!
递归的三要素
第要素:明确你这个函数想要么
对于递归,我觉得很重要的个事就是,这个函数的功能是么,他要完成么样的件事,这个,
是完全由你来定义的。也就是说,我们先管函数的代码么,是要先明,你这个函数是
要来么。
如,我定义个函数
这个函数的功能是算 n 的阶乘。好,我们已经定义个函数,并且定义它的功能是么,接下来
我们看第要素。
第要素:寻找递归结束条件
所谓递归,就是会在函数内部代码中,调这个函数本身,所以,我们必须要找出递归的结束条件,
然的话,会直调,进底。也就是说,我们需要找出当参数为啥时,递归结束,之后直接
把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是么。
// 算 n 的阶乘(假设n为0)
int f(int n){
}
![](https://csdnimg.cn/release/download_crawler_static/12610714/bg13.jpg)
如,上那个,当 n = 1 时,那你应该能够直接知道 f(n) 是啥吧?此时,f(1) = 1。完善我们函数
内部的代码,把第要素加进代码,如下
有可能会说,当 n = 2 时,那我们可以直接知道 f(n) 等于多少啊,那我可以把 n = 2 作为递归的结束
条件吗?
当然可以,只要你觉得参数是么时,你能够直接知道函数的结果,那么你就可以把这个参数作为结束
的条件,所以下这段代码也是可以的。
注意我代码写的注释,假设 n >= 2,因为如果 n = 1时,会被掉,当 n <= 2时,f(n) = n,所以为
加严谨,我们可以写成这样:
第三要素:找出函数的等价关系式
第三要素就是,我们要断缩参数的范围,缩之后,我们可以通过些辅助的变或者操作,使原
函数的结果变。
如,f(n) 这个范围较,我们可以让 f(n) = n * f(n-1)。这样,范围就由 n 变成 n-1 ,范围变
,并且为原函数f(n) 变,我们需要让 f(n-1) 乘以 n。
说,就是要找到原函数的个等价关系式,f(n) 的等价关系式为 n * f(n-1),即
f(n) = n * f(n-1)。
这个等价关系式的寻找,可以说是最难的步,如果你懂也没关系,因为你是天才,你
还需要多接触道题,我会在接下来的章中,找 10 道递归题,让你慢慢熟悉起来。
找出这个等价,继续完善我们的代码,我们把这个等价式写进函数。如下:
// 算 n 的阶乘(假设n为0)
int f(int n){
if(n == 1){
return 1;
}
}
// 算 n 的阶乘(假设n>=2)
int f(int n){
if(n == 2){
return 2;
}
}
// 算 n 的阶乘(假设n为0)
int f(int n){
if(n <= 2){
return n;
}
}
![](https://csdnimg.cn/release/download_crawler_static/12610714/bg14.jpg)
此,递归三要素已经都写进代码,所以这个 f(n) 功能的内部代码我们已经写好。
这就是递归最重要的三要素,每次做递归的时候,你就强迫试着去寻找这三个要素。
还是懂?没关系,我再按照这个模式讲些题。
有些有点基础的可能觉得我写的太简单,没耐看?少侠,请继续看,我下还会讲如何优
化递归。当然,佬请随意,可以直接拉动最下给我些建议,万分感谢!
案1:斐波那契数
斐波那契数的是这样个数:1、1、2、3、5、8、13、21、34....,即第项 f(1) = 1,第项
f(2) = 1.....,第 n 项为 f(n) = f(n-1) + f(n-2)。求第 n 项的值是多少。
1、第递归函数功能
假设 f(n) 的功能是求第 n 项的值,代码如下:
2、找出递归结束的条件
显然,当 n = 1 或者 n = 2 ,我们可以轻着知道结果 f(1) = f(2) = n。所以递归结束条件可以为 n <= 2。
代码如下:
第三要素:找出函数的等价关系式
题已经把等价关系式给我们,所以我们很容就能够知道 f(n) = f(n-1) + f(n-2)。我说过,等价关系
式是最难找的个,这个题却把关系式给我们,这也太容,好吧,我这是为兼顾乎零基础
的读者。
所以最终代码如下:
// 算 n 的阶乘(假设n为0)
int f(int n){
if(n <= 2){
return n;
}
// 把 f(n) 的等价操作写进去
return f(n-1) * n;
}
int f(int n){
}
int f(int n){
if(n <= 2){
return n;
}
}
剩余629页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://profile-avatar.csdnimg.cn/8f79d2a46a944891960354ac8ae8708c_qq_18822147.jpg!1)
Quant0xff
- 粉丝: 1w+
- 资源: 459
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 新型矿用本安直流稳压电源设计:双重保护电路
- 煤矿掘进工作面安全因素研究:结构方程模型
- 利用同位素位移探测原子内部新型力
- 钻锚机钻臂动力学仿真分析与优化
- 钻孔成像技术在巷道松动圈检测与支护设计中的应用
- 极化与非极化ep碰撞中J/ψ的Sivers与cos2φ效应:理论分析与COMPASS验证
- 新疆矿区1200m深孔钻探关键技术与实践
- 建筑行业事故预防:综合动态事故致因理论的应用
- 北斗卫星监测系统在电网塔形实时监控中的应用
- 煤层气羽状水平井数值模拟:交替隐式算法的应用
- 开放字符串T对偶与双空间坐标变换
- 煤矿瓦斯抽采半径测定新方法——瓦斯储量法
- 大倾角大采高工作面设备稳定与安全控制关键技术
- 超标违规背景下的热波动影响分析
- 中国煤矿选煤设计进展与挑战:历史、现状与未来发展
- 反演技术与RBF神经网络在移动机器人控制中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)