重庆网站建设加q.479185700,推荐门户网站建设公司,开发游戏软件需要学什么专业,石青网站推广软件本系列基于当前各大公司对大公司的考察情况#xff0c;给大家规划一条可行的算法刷题路线#xff0c;大概会规划 200 道自认为有用的题#xff0c;并且争取让初学者#xff0c;能够刷起来更加丝滑#xff0c;而且每个阶段都会进行相对应的说明。
当然#xff0c;无论是面…本系列基于当前各大公司对大公司的考察情况给大家规划一条可行的算法刷题路线大概会规划 200 道自认为有用的题并且争取让初学者能够刷起来更加丝滑而且每个阶段都会进行相对应的说明。
当然无论是面试还是笔试你也完全可以按照这个路线来应付大公司算法面试是够的了
算法学习的四个阶段 在刷题之前我们先来说一下大致的规划这部分主要说一个算法大致的学习路径当然我说的不是针对要打 ACM 的选手哦大家可以参考一下算法的学习总的来说算法最重要的还是刷题没有很多的奇技淫巧。为了让大家更好对号入座从 0 基础小白到上战场我觉得算法的学习可以分成四个阶段。 后面的算法题也会安排这种阶段来给大家安排。
阶段一学习一门编程语言 做一些练习题
首先我觉得就是要学习一门编程语言JavaCC都可以不用纠结语言不过我相信大家掌握完语言之后代码能力还是非常差的这个时候提高代码能力最快的方法就是做习题锻炼代码能力。
所以第一阶段就是一边学习编程语言一边做题锻炼自己的编码能力 思维做的这些题最好不要涉及诸如回溯动态规划等算法思想而是应该做那些偏向逻辑的题相当于是打基础了比如我们在学习 C 语言的时候也会有很多锻炼思维的题比如打印各种排列的五角星啊计算质数啊简单的二分查找啊等等这些题可以用来打基础用。
通过这些练习可以让你以后做起题来更加顺手给你的代码能力打下很好的基础反正我以前在自己学校 OJ 做过挺多让我打下了相对扎实的基础。
为什么有些人按照某个攻略刷了很多题但是算法能力还是那么差我觉得就是基础没打好编码能力不大行这个需要长期养成特别是能够把想法转化成代码的这样一种编程能力很多人就不大行一想就会一实际做就废。
不过阶段一可能很多人都学过基本语法了那么阶段一可能被你跳过了那么也没事吧。
阶段二学习基础数据结构
通过阶段1大家有了一定的编码能力但是距离去 Leetcode 刷题或者去打比赛那么还是不行的因为很多题都会涉及诸如链表队列二叉树哈希表等如果你没接触过这些那可能基本没法做。
所以第二阶段就是把数据结构学一下理解复杂度的概念以及会使用基本的数据结构比如 Java 的常见集合或者 C 的 STLC也能调用STL掌握了这些你才能更好刷题。
其实内容也不多就掌握常见的链表队列栈二叉树哈希表 就差不多了。
第三阶段在刷题中踩坑与填坑
学完阶段1和2你就可以去刷题了题库目前比较流行的就是 leetcode然后有一个疑问就是我应该是按照顺序刷还是专题刷呢
说实话其实都可以但是按顺序你要学会放弃某些题你看leetcode第十题就是正则表达式这道题是非常难的了但无论按照那个方式刷大家就是要记住一句话踩坑与填坑。
PS如果你不大会区分leetcode题目的难易程度那么可以按专题刷并且前期尽量刷简单和中等的题
什么意思
就是在刷题的过程中你会接触很多你没学过的方法比如双指针比如单调栈比如贪心算法等等。
你一开始做可能自己用的方法很粗暴然后看题解卧槽还能这样子于是你收获了这样一种算法思想并且记忆深刻这就是一个填坑的过程。
通过这种方式你的思维和编码能力都能得到比较大的提升。
但是呢有些算法思想可能你会很难一次就能填比如动态规划但是请大家不要纠结一次性就填完同时请相信你踩多了之后在未来可能就莫名理解了卧槽原来是这样。
所以呢我觉得第三阶段就是一个在踩坑中不断拓展自己思维不断积累方法的过程而在这个过程里你需要多去刷题需要多去接触新的题型。
因为算法很多题就是你没接触过你就真的做不出来反正我觉得大部分是这样毕竟不是天才。
所以我希望大家能够记住踩坑与填坑这个词你需要去理解这个词因为我看好多人刷了好多题但是还好菜啊我还挺奇怪的反正我当时并没有刷多刷题但是大部分 leetcode 的题一刷就会了一方面是我基础打的好另外一方面就是我是踩坑挣扎填坑然后就理解的比较深刻所以我是推荐这样一种方式的。
第四阶段在比赛中成长
经过了阶段12和3我相信大家已经入门了算法了leetcode 常见的容易中等题也会了甚至面试时大部分的题也会了但是我敢保证你做笔试题可能还会一塌糊涂。
一个简单的原因就是你之前做的题大部分就是考察某种算法思想而且题目也差不多告诉你应该用哪种方法了 题目描述特别简单。
但是等你上了笔试可能你蒙了卧槽要自己处理输入输出卧槽这个题目描述我居然看不懂
总的来说就是笔试时很多题时有一个具体的场景的读题都需要一段时间而且你可能不知道用啥方法也有可能是多种方法的综合题。
所以你可能 4 道题只能做一道或者 1.5 道但是当你看到答案的时候发现也不怎么难但是你却不会
这个时候为了更好成长我们需要去打比赛在比赛中成长至于去哪里打
大家去打 Leetcode 周赛牛客网周赛就可以了leetcode 周赛知名度高一些。多参与几次你的综合能力会慢慢得到提升。
所以我觉得如果要想要变的更强除了刷题还要去参加比赛在比赛中成长但是比赛完一定一定要去总结不能打完就过了即使去总结需要花很多时间当然太难的题建议就不理了因为那不属于你 刷题顺序 注意刷题没有严格顺序专题刷或者顺序刷都可以但是这对于初学者来说容易遇到很难的题进而被劝退所以如果你没有明确的目标你可以按照我这个顺序来刷题本刷题顺序只是基于我个人的刷题理解挑选了差不多 200 道题并且会按照循环渐进且相对系统的方式给出题目反正按照这个顺序刷以后应付算法面试或者打蓝桥杯这些都是问题不大。 另外本顺序会按照上面算法学习四个阶段来安排哦。 基础算法的掌握20题 PS如果你不大懂时间复杂度这些那么先看下这篇文章漫画别在问我什么是时间复杂度 本章节会给出一些基础算法给大家刷刷本章节你不需要去学习任何算法思想你只要学过编程语言就能刷这些题更多的是锻炼你的编码能力与编程思维对应算法四个阶段的阶段一。
题型本章节会涉及二分查找双指针简单位运算等基础算法但这些都不需要提前去学因为比较简单并且你不需要这些技巧也能暴力做出来之后去看答案学习优化顺便学习这些技巧。
难度基本都是属于 容易 级别的题供大家训练思维 与编码。
提醒
如果你算法有一定的基础的那么你也可以跳过这一部分。你可以不需要给出最优解先会最暴力做出来就好了之后看答案最优解能看懂就看懂看不懂就别理
1. 两数之和
13. 罗马数字转整数
26. 删除有序数组中的重复项
2022. 将一维数组转变成二维数组
剑指 Offer 39. 数组中出现次数超过一半的数字
88. 合并两个有序数组
704. 二分查找
69. x 的平方根
118. 杨辉三角
125. 验证回文串
344. 反转字符串
191. 位1的个数
326. 3 的幂
204. 计数质数
2427. 公因子的数目
1979. 找出数组的最大公约数
1984. 学生分数的最小差值
面试题61. 扑克牌中的顺子
812. 最大三角形面积
292. Nim 游戏
大家如果学校有 OJ 啥的可以多去刷一刷这些不怎么难的思维题当然如果你这些简单的题做起来挺熟练了那就没必要继续去做了否则的话多做做还是挺不错不用着急去学各种牛逼的算法思想做了就会有用如果大家能够把自己的想法转化成代码那对你以后做各种题一定可以打下非常好的基础。
这里也无法给出太多这种题这 20 道主要给自己练一练手感提高下大家的编程能力而且这些题不会很难也不会把大家劝退接下来我们会分类来各种算法题型。 精选分类刷题说明 点击展开 有了前面的算法思维基础之后我们开始来更加细致的刷题那么这个阶段我个人是建议分类刷的另外我认为分类刷题我们要系统什么意思呢就是每个分类下面也有不少题型有些题型如果你没接触过那么就会完全没有思路所以呢会在这个模块中尽量系统着选出各类题并且尽量全。 当然即使是简单的类别中也会有一些比较难的题我可能不会把这些题选进去感觉没必要因为这个时候的你算法还比较一般对于一些比较难的题要么我会做一些标记要么会再最后面再放出来给大家做总的来说就是尽量让大家刷起来丝滑 尽量全面。 链表23道 说到分类刷题我觉得有了一定的算法基础之后比如你做了上面的 20 多道题能够写出简单算法之后 就可以开始刷链表的题了链表题思路不难更多的还是考察你的编码能力 思维的严谨性反正在面试的时候特别容易出错你以为你会了代码一写错误一大堆。 好了下面会给出大概 20 多道链表题供大家刷基本把大部分常见题型都覆盖了
剑指 Offer 06. 从尾到头打印链表
160. 相交链表
203. 移除链表元素
19. 删除链表的倒数第 N 个结点
876. 链表的中间结点
21. 合并两个有序链表
61. 旋转链表
141. 环形链表
142. 环形链表 II
206. 反转链表
92. 反转链表 II
25. K 个一组翻转链表
83. 删除排序链表中的重复元素
82. 删除排序链表中的重复元素 II
148. 排序链表
234. 回文链表
382. 链表随机节点
138. 复制带随机指针的链表
146. LRU 缓存
460. LFU 缓存
707. 设计链表
1290. 二进制链表转整数
1472. 设计浏览器历史记录 队列与栈10 队列和栈的题比较少所以这里给的题也不多有不少题其实也用到队列和栈不过归纳到其他题型里了比如二叉树遍历相关基本就离不开了还有一些比较困难的诸如单调栈相关的很多都是困难级别的了而且不容易理解这种大家遇到了再学吧。 225. 用队列实现栈
232. 用栈实现队列
20. 有效的括号
32. 最长有效括号
150. 逆波兰表达式求值
155. 最小栈
下面几道是优先队列相关这里我需要做一个说明就是不借助IDEA也能正确使用优先队列等函数
239. 滑动窗口最大值
347. 前 K 个高频元素
295. 数据流的中位数
451. 根据字符出现频率排序 二叉树25道 二叉树和链表类似都是考察特别频繁的题如果你理解了递归那么二叉树做起来会容易很多因为二叉树很多题基本都是需要递归求解。大家把一下的二叉树题刷了就差不多的了 94. 二叉树的中序遍历 容易
144. 二叉树的前序遍历 容易
145. 二叉树的后序遍历 容易
103. 二叉树的锯齿形层序遍历 中等
102. 二叉树的层序遍历 中等
107. 二叉树的层序遍历 II 中等
105. 从前序与中序遍历序列构造二叉树 中等
106. 从中序与后序遍历序列构造二叉 中等
230. 二叉搜索树中第K小的元素 中等
剑指 Offer 27. 二叉树的镜像 容易
101. 对称二叉树 容易
104. 二叉树的最大深度 容易
662. 二叉树最大宽度 中等
110. 平衡二叉树 容易
199. 二叉树的右视图 中等
112. 路径总和 容易
113. 路径总和 II 中等
437. 路径总和 III
257. 二叉树的所有路径 简单
129. 求根到叶子节点数字之和 中等
235. 二叉搜索树的最近公共祖先 中等
236. 二叉树的最近公共祖先 中等
124. 二叉树中的最大路径和 困难
114. 二叉树展开为链表 中等
297. 二叉树的序列化与反序列化 困难 回溯19道 回溯的题大部分都是暴力题如果不大懂回溯可以先去学习一下深度搜索和广度搜索另外学会回溯非常重要吧绝大部分题都可以回溯暴力求解如果是在笔试那么暴力求解可以拿到 33% 左右发分数。 不过回溯在面试中其实考的不怎么多但是掌握这种思维我觉得非常重要吧。
401. 二进制手表 简单
22. 括号生成 中等
17. 电话号码的字母组合 中等
93. 复原IP地址 中等
39. 组合总和 中等
40. 组合总和 II 中等
216. 组合总和 III 中等
46. 全排列 中等
47. 全排列 II 中等
567. 字符串的排列 中等
78. 子集中等
90. 子集 II 中等
剑指 Offer 12. 矩阵中的路径 中等
剑指 Offer 13. 机器人的运动范围中等
剑指 Offer 34. 二叉树中和为某一值的路径 中等
89. 格雷编码 中等
51. N 皇后 困难
52. N皇后 II 困难
37. 解数独 困难 贪心算法(10道) 我觉得贪心的题做做就好其实很多题你也不知道能否用贪心而且也没有个明确的特性说它可以用贪心有时候有了贪心也不一定是最优解所以对于贪心这块了解思想就好知道有这么一回事 455. 分发饼干 简单
121. 买卖股票的最佳时机 简单
55. 跳跃游戏 中等
45. 跳跃游戏 II 中等
435. 无重叠区间 中等
714. 买卖股票的最佳时机含手续费 中等
921. 使括号有效的最少添加 中等
134. 加油站 中等
376. 摆动序列 中等
738. 单调递增的数字 中等 动态规划(24道) 动态规划不用说又难又重要大家如果能够把下面的题掌握那应该问题就不大了当然如果从面试的角度看其实掌握容易中等的题就差不多了。我记得我一开始老是看的懂题解但不会做于是狂刷了四五十道DP的题就掌握了方法了之后挺多 DP 的题都能够做出来具体看这篇文章【动态规划】关于动态规划我总结的解题步骤 70. 爬楼梯 容易
112. 路径总和 容易
113. 路径总和 II 中等
62. 不同路径 中等
63. 不同路径 II 中等
64. 最小路径和 中等
198. 打家劫舍 中等
213. 打家劫舍 II中等
221. 最大正方形 中等
322. 零钱兑换 中等
518. 零钱兑换 II 中等
5. 最长回文子串 中等
718. 最长重复子数组 中等
1143.最长上升子序列 中等
121. 买卖股票的最佳时机 容易
122. 买卖股票的最佳时机 II 中等
123. 买卖股票的最佳时机 III 困难
188. 买卖股票的最佳时机 IV 困难
42. 接雨水 困难
72. 编辑距离 困难
10. 正则表达式匹配 困难
152. 乘积最大子数组 中等
174. 地下城游戏 困难
85. 最大矩形 困难 数学知识与位运算(8道) 有一些题涉及到一些数学相关的我这里随便挑选了几道吧。 1201. 丑数 III 中等
914. 卡牌分组 简单
1799. N 次操作后的最大分数和 困难
204. 计数质数 中等
172. 阶乘后的零 中等
136. 只出现一次的数字 简单
137. 只出现一次的数字 II 中等
260. 只出现一次的数字 III 中等 并查集5道 并查集的问题主要就是把模版理解好然后写熟悉之后遇到就会很好做了。 200. 岛屿数量 中等
547. 省份数量 中等
695. 岛屿的最大面积 中等
1020. 飞地的数量 中等
721. 账户合并 中等 排序9道 有一些题用道了排序相关的思维一般快速排序 归并 堆 这三种多一些。 912. 排序数组
315. 计算右侧小于当前元素的个
561. 数组拆分
1122. 数组的相对排序
268. 丢失的数字
215. 数组中的第K个最大元素
347. 前 K 个高频元素
剑指 Offer 40. 最小的k个数
剑指 Offer 51. 数组中的逆序对 字符串与其他16道 其实字符串的题有很多了而且绝大部分的字符串都可以用动态规划解决不过那些题被我划分道动态规划那里去了然后还有一些题为觉得也很有必要做一下道并且也不难大家可以简单过一下然后把一些其他的题也归纳进来 14. 最长公共前缀
6. N 字形变换
43. 字符串相乘
87. 扰乱字符串
208. 实现 Trie (前缀树)
415. 字符串相加
541. 反转字符串 II
31. 下一个排列
41. 缺失的第一个正数
50. Pow(x, n)
54. 螺旋矩阵
59. 螺旋矩阵 II
65. 有效数字
268. 丢失的数字
153. 寻找旋转排序数组中的最小值
154. 寻找旋转排序数组中的最小值 以上的题基本覆盖面试中的所有考点当然应付面试不需要刷这么多只要你能把我弄的这个学习路线的题搞懂那你算法基本问题不大这份攻略后面可能会慢慢补上题解不过每一道题leetcode 也有对应的题解大家按照我这个顺序去刷题就可以了。
大家加油