为什么有人说弄懂了《算法导论》的,90%,就超越了,90%的程序员?
- 建站教程
- 2024-09-25 23:19:01
何止90%,真弄懂了《算法导论》的90%,超越99%程序员问题都不大。
中下游985 CS专业,毕业加入腾讯,靠的就是看算法书+刷题。
曾经在北大ACM网站上疯狂刷题:
请原谅我当时年幼无知之下取的账户名《算法导论》这本巨作也被我反复翻看,反复实践:
曾经的算法小抄笔记:
还记得当年为了更快的进步,跑去蹭研究生的课程,听到NP难问题不由感叹:算法世界太奇妙了。这两者应该同时进行,螺旋上升,边看书边刷题,刷题遇到阻力了定向爆破式的去看书,看完再实践,这样成长最快。
看书的话,千万别一上来就看《算法导论》,这样很容易让人迷失,我那个年代资料和书籍比较匮乏,现在丰富多了。
可以看看《啊哈算法》和《算法图解》,这两本都相对简单,看完后刷题有了一定基础再去攻克《算法导论》。
算法真的是个好东西,也是程序员学习的重中之重,大厂笔试面试基本必考算法,想进大厂先从刷算法做起是个好方法,算法厉害的人进大厂非常容易,这里给学弟学妹们送一本阿里P8撰写的算法刷题笔记,身边不少朋友通过它加入大厂:
现在刷题一般刷Leetcode,注意刷题也是有方法论的,其实刷题非常符合「刻意练习」的范畴,多练习就会建立更多的解题思路,这些思路积累的越多刷起来就越容易。
另外,有一个非常重要的诀窍:一个个题型去攻克,而不是广撒网,比如说先练习数组,那就尽可能多的找数组类的问题,直到数组类型的都难不到你,再换其他题型。
下面分享一个ACM金牌得主的刷题经验,希望对大家有帮助:
作者:编程熊;链接:https://zhuanlan.zhihu.com/p/388470520;来源:知乎(PS:感谢耐心阅读,觉得不错双击点赞哈,顺便送大家一份超硬核的书单资源,我把大学和工作中用的经典电子书库(包含算法、数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,学完进大厂很容易:
我已经帮大家打包好了,点击下方链接直接获取:
算法和数据结构知识点图
首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观 。
下面是我花了一天时间整理的 算法和数据结构的知识结构,大家可以看看。
后面是为大家 精心挑选的LeetCode题单,并根据题目知识点的类型分好了类别,大家可以根据每个知识点,进行有针对性的刷题。
数据结构
数组&双指针
LeetCode 1. 两数之和LeetCode 4. 寻找两个正序数组的中位数LeetCode 15. 三数之和LeetCode 75. 颜色分类LeetCode 76. 最小覆盖子串LeetCode 142. 环形链表 IILeetCode 234. 回文链表LeetCode 283. 移动零链表
LeetCode 19. 删除链表的倒数第 N 个结点LeetCode 148. 排序链表LeetCode 160. 相交链表LeetCode 206. 反转链表《线性表》核心教程
算法对程序员非常重要,大厂面试官必考,刷题可以有效提升算法能力,比如这个阿里大佬刷Leetcode总结的算法笔记,如果你能吃透,那我相信毕业拿下大厂offer挺容易的,这份资料也送给大家:
这本书的目录,非常经典:
队列&栈
LeetCode 20. 有效的括号LeetCode 21. 合并两个有序链表LeetCode 84. 柱状图中最大的矩形LeetCode 85. 最大矩形LeetCode 155. 最小栈LeetCode 239. 滑动窗口最大值LeetCode 394. 字符串解码LeetCode 739. 每日温度LeetCode 3. 无重复字符的最长子串《单调栈和滑动窗口》核心教程
哈希表
LeetCode 49. 字母异位词分组128. 最长连续序列LeetCode 141. 环形链表LeetCode 146. LRU 缓存机制LeetCode 560. 和为K的子数组二叉树
LeetCode 94. 二叉树的中序遍历101. 对称二叉树102. 二叉树的层序遍历LeetCode 104. 二叉树的最大深度LeetCode 105. 从前序与中序遍历序列构造二叉树LeetCode 114. 二叉树展开为链表LeetCode 543. 二叉树的直径二叉搜索树
LeetCode 96. 不同的二叉搜索树LeetCode 98. 验证二叉搜索树算法
模拟
LeetCode 48. 旋转图像贪心
LeetCode 11. 盛最多水的容器LeetCode 714. 买卖股票的最佳时机含手续费LeetCode 122. 买卖股票的最佳时机 IILeetCode 55. 跳跃游戏LeetCode 309. 最佳买卖股票时机含冷冻期LeetCode 406. 根据身高重建队列二分
LeetCode 33. 搜索旋转排序数组LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置递归&回溯
LeetCode 17. 电话号码的字母组合LeetCode 22. 括号生成LeetCode 39. 组合总和LeetCode 46. 全排列LeetCode 78. 子集LeetCode 79. 单词搜索LeetCode 226. 翻转二叉树深度优先搜索DFS
LeetCode 236. 二叉树的最近公共祖先LeetCode 301. 删除无效的括号宽度优先搜索BFS
LeetCode 200. 岛屿数量LeetCode 617. 合并二叉树分治
LeetCode 53. 最大子序和排序算法
LeetCode 56. 合并区间LeetCode 215. 数组中的第K个最大元素LeetCode 347. 前 K 个高频元素Manacher算法
LeetCode 5. 最长回文子串LeetCode 647. 回文子串字典树Trie
LeetCode 139. 单词拆分LeetCode 208. 实现 Trie (前缀树)动态规划
LeetCode 10. 正则表达式匹配LeetCode 32. 最长有效括号LeetCode 42. 接雨水LeetCode 62. 不同路径LeetCode 64. 最小路径和LeetCode 70. 爬楼梯LeetCode 72. 编辑距离LeetCode 139. 单词拆分LeetCode 152. 乘积最大子数组LeetCode 198. 打家劫舍LeetCode 221. 最大正方形LeetCode 300. 最长递增子序列LeetCode 337. 打家劫舍 IIILeetCode 416. 分割等和子集LeetCode 494. 目标和最短路算法
LeetCode 743. 网络延迟时间最小生成树
1584. 连接所有点的最小费用拓扑排序
LeetCode 207. 课程表并查集
LeetCode 399. 除法求值还在不断完善中。
我把学习 算法和数据结构和计算机核心的书籍 都下面整理好了获取,在学习计算机的路上肯定能用到,身边的同学都在看。
书单
下面讲一下如何刷题。
如何正确的做一道题
从简入手: 先从简单暴力(时间复杂度高)的方法入手。优化: 思考如何在第一步的基础上,如何优化算法,降低时间复杂度。构思代码: 有了以上两步,我们此时应该已经有了一个正确的想法,此时我们应该构思代码,有那几部分,每部分实现什么功能,代码怎么写。而不是直接闷头去写代码,因为很多时候没想清楚,直接去写代码,会导致写了一半发现思路不对,写的代码都是错误的。写代码: 实现第三步代码。(Debug): 如果我们的题目没有通过测试,应该检查代码是不是有bug、思路对不对等。总结与反思: 题目通过了,我们应该总结一下这道题考察的知识点、切入的角度、同类型的题目等,同时思考有没有更优的办法。做到以上几点,一道题学习的就很透了,遇到同类型的题目可以举一反三啦。
为什么有人说弄懂了《算法导论》的,90%,就超越了,90%的程序员?由讯客互联建站教程栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“为什么有人说弄懂了《算法导论》的,90%,就超越了,90%的程序员?”