网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
+ 其实什么语言没有太大区别,主要是思想,用着顺手就行。
+ 这里安利一波Java,哈哈,Java写算法题写多了,真的比较舒适。
-
关于文章类型的选择:
- 选取了一些较为基本的算法类型,都是比较常见的。
- 不涉及ACM等难度太高的题,大佬们移步哈。
- 都是一些比较经典的问题。
-
关于题目的来源:
- 平时主要刷题的平台是Leetcode,因为是函数式的,比较方便。
- 还有一些是在《剑指offer》,《程序员面试金典》中看到比较好的,所有题目后面都给出了出处。
-
关于题解的说明:
- 题解是我自己所写,有时候也参考了一些官方题解的思想,可能更好理解。
- 题解的代码都提交测试过的,保证暂时没有问题。
- 个人水平有限,可能文章里面存在一些问题,还望大佬多多指点。
- 每个题目附带了原文链接,不喜欢阅读我题解的小伙伴们也可以直接移步原出处哈。
-
关于算法能力提升的一些意见:
- 个人认为,算法来说,思想最为重要,有算法的严谨思想,才是算法能力提升的基础。
- 刷题就是培养算法思想的一种实际行动。
- 好好理解透一个问题,或者一类问题,远胜于你麻木的刷大量的题。
- 算法确实也有模板题,只需要照着模板就能做出,但问题是,照着模板就一定能做出来嘛,是否真正理解了为什么这个模板可以通用。
-
关于分类:
- 有些分类确实不太好分,所以就单独列出来了。
- 主要的还是区分开来了。
0x03.正文–精选算法100题(附个人题解)
分类一:动态规划(dp)
没错,就是你熟悉的dp,dp说简单也简单,说难也实在是太难了,重点是如何找到里面的状态转移方程。经过这些题目的训练,希望你能有一些初步的dp思路了。
题目名称 | 来源 | 个人题解 | 备注 |
---|---|---|---|
01.打家劫舍 | Leetcode题198:戳我前往 | 戳我前往 | 估计是最好的dp入门题型了 |
02.斐波拉契数列 | 经典问题 | 戳我前往 | 确实比较经典哦~ |
03.零钱兑换问题 | Leetcode题322:戳我前往 | 戳我前往 | 也是一个比较经典的问题了 |
04.零钱兑换II | Leetcode题518:戳我前往 | 戳我前往 | 零钱问题通用解法 |
05.最长上升子序列 | Leetcode题300:戳我前往 | 戳我前往 | 堪称数组dp中的典范 |
06.牌型种数 | 蓝桥杯:链接暂无 | 戳我前往 | 二维动态规划,要仔细想想 |
07.最低票价 | Leetcode题983:戳我前往 | 戳我前往 | 如何状态转移? |
08.不同的二叉搜索树 | Leetcode题152:戳我前往 | 戳我前往 | 你会发现dp的神奇之处 |
09.礼物的最大价值 | 《剑指offer》题47 | 戳我前往 | 优化dp的思路 |
10.接雨水 | Leetcode题42:戳我前往 | 戳我前往 | 需要仔细思考以发现dp |
11.编辑距离 | Leetcode题72:戳我前往 | 戳我前往 | 最为经典的二维dp题型 |
12.买卖股票的最佳时机(6题) | Leetcode6题:戳我前往 | 戳我前往 | 统一化的dp思维,棒 |
13.鸡蛋掉落 | Leetcode题887:戳我前往 | 戳我前往 | 有些难度哦~ |
14.最大正方形 | Leetcode题221:戳我前往 | 戳我前往 | 矩阵中的dp思路 |
15.和为K的子数组 | Leetcode题560:戳我前往 | 戳我前往 | 前缀和也是dp的思路 |
分类二:搜索类(DFS,BFS,回溯,暴力搜索)
搜索类的算法题应该是随便哪个算法比赛都可以看到,虽然经典,但在这上面还是会有比较难的问题,所以,掌握基本思路和套路就显得格外重要。
题目名称 | 来源 | 个人题解 | 备注 |
---|---|---|---|
16.图的深搜和广搜 | 经典问题 | 戳我前往 | 搜索中的经典问题 |
17.方格填数 | 蓝桥杯:链接暂无 | 戳我前往 | 揣摩一下DFS的思路 |
18.路径之谜 | 蓝桥杯:链接暂无 | 戳我前往 | 经典改编迷宫问题 |
19.岛屿的最大面积 | Leetcode题695:戳我前往 | 戳我前往 | 最常见的矩阵中的DFS |
20.逃离大迷宫 | Leetcode题1036:戳我前往 | 戳我前往 | 各种搜索思想都可以应用 |
21.单词搜索 | Leetcode题79:戳我前往 | 戳我前往 | 字符串中的搜索 |
22.检查网格中是否存在有效路径 | Leetcode题1391:戳我前往 | 戳我前往 | 思考另类的搜索 |
23.地图分析 | Leetcode题1162:戳我前往 | 戳我前往 | 多源BFS |
24.机器人的运动范围 | 《剑指offer》13题 | 戳我前往 | DFS进行计数的基本思路 |
25.括号生成 | Leetcode题22:戳我前往 | 戳我前往 | 用DFS生产括号 |
26.01 矩阵 | Leetcode题542:戳我前往 | 戳我前往 | 矩阵中的搜索 |
27.岛屿数量 | Leetcode题200:戳我前往 | 戳我前往 | 根据需求使用DFS |
28.全排列问题 | Leetcode题46:戳我前往 | 戳我前往 | 最经典的回溯算法 |
分类三:字符串
别忽视字符串的算法问题,它难起来可以非常难,简单的也很简单,面试喜欢提问,而且特别容易出错,需要引起重视。
题目名称 | 来源 | 个人题解 | 备注 |
---|---|---|---|
29.KMP算法 | 经典算法 | 戳我前往 | 经典字符串匹配算法 |
30.拼写单词 | Leetcode题1160:戳我前往 | 戳我前往 | 很简单的字符串问题 |
31.竖直打印单词 | Leetcode题1324:戳我前往 | 戳我前往 | 简单但值得思考 |
32.不含 AAA 或 BBB 的字符串 | Leetcode题984:戳我前往 | 戳我前往 | 巧妙构造出字符串 |
33.实现Trie(前缀树) | Leetcode题208:戳我前往 | 戳我前往 | 字符串中经典的算法 |
34.最长快乐前缀 | Leetcode题1392:戳我前往 | 戳我前往 | 如何处理字符串的前后缀 |
35.单词搜索II | Leetcode题212:戳我前往 | 戳我前往 | 前缀树的应用 |
36.单词的压缩编码 | Leetcode题820:戳我前往 | 戳我前往 | 前缀树灵活运用 |
37.判定字符是否唯一 | 《程序员面试金典》01.02 | 戳我前往 | 简单但值得思考 |
38.判定是否互为字符重排 | 《程序员面试金典》 01.02 | 戳我前往 | 简单的面试题 |
39.无重复字符的最长子串 | Leetcode题3:戳我前往 | 戳我前往 | 字符串中的滑动窗口 |
40.字符串转换整数 | Leetcode题8:戳我前往 | 戳我前往 | 需要考虑的细节很多 |
41.翻转字符串里的单词 | Leetcode题151:戳我前往 | 戳我前往 | 正则匹配 |
42.整数转换英文表示 | Leetcode题273:戳我前往 | 戳我前往 | 非常实用的算法题 |
43.统计重复个数 | Leetcode题466:戳我前往 | 戳我前往 | 循环结剪枝 |
44.超级回文数 | Leetcode题906:戳我前往 | 戳我前往 | 字符串与大数的处理思路 |
45.单词子集 | Leetcode题96:戳我前往 | 戳我前往 | 特征思想的应用 |
分类四:容器类(哈希表,栈,队列,Map,Set)
容器类的算法题一般需要根据一些容器的特点来解决响应的问题,还有需要选择合适的容器进行新的数据结构的设计,掌握它们的使用,非常重要。
题目名称 | 来源 | 个人题解 | 备注 |
---|---|---|---|
46.按位与为零的三元组 | Leetcode题82:戳我前往 | 戳我前往 | 哈希表优化 |
47.设计地铁系统 | Leetcode题1396:戳我前往 | 戳我前往 | 合理选择容器 |
48.LFU缓存 | 《程序员面试金典》 | 戳我前往 | 选择容器来设计 |
49.设计推特 | Leetcode题355:戳我前往 | 戳我前往 | 很实用的算法 |
50.最小栈 | Leetcode题155:戳我前往 | 戳我前往 | 两栈设计最小栈 |
51.子数组的最小值之和 | Leetcode题907:戳我前往 | 戳我前往 | 单调栈的应用 |
52.栈的压入、弹出序列 | 《剑指offer》 | 戳我前往 | 栈的合法序列 |
53.有效括号的嵌套深度 | Leetcode题1111:戳我前往 | 戳我前往 | 模仿栈 |
54.逆波兰算法 | 经典算法 | 戳我前往 | 后缀表达式关键算法 |
分类五:数学思维类(含位运算思想)
数学思维类的题由于需要很强大的数学思维,但是这又不是一天可以练成的,所以,也常常在面试中会被问到,只有慢慢的积累,才是王道。
题目名称 | 来源 | 个人题解 | 备注 |
---|---|---|---|
55.水壶问题 | Leetcode题365:戳我前往 | 戳我前往 | 经典数学问题 |
56.三维形体的表面积 | Leetcode题892:戳我前往 | 戳我前往 | 空间思想解决算法问题 |
57.生命游戏 | Leetcode题289:戳我前往 | 戳我前往 | 数学思维的运用 |
58.交点 | 《程序员面试金典》16.03 | 戳我前往 | 二维平面的交点问题 |
59.使数组唯一的最小增量 | Leetcode题945:戳我前往 | 戳我前往 | 数学思维的运用 |
60.数值的整数次方 | 《剑指offer》题16 | 戳我前往 | 非常容易出错的面试题 |
61.求 1+2+…+n | 《剑指offer》 | 戳我前往 | 短路原则 |
62.1~n整数中1出现的次数 | 《剑指offer》 | 戳我前往 | 数学思维找规律 |
63.数组中数字出现的次数 | 《剑指offer》 | 戳我前往 | 分组异或 |
分类六:链表
链表是一种非常常见的数据结构,不管在实际应用还是算法竞赛中,都经常出现,掌握对它们的基本处理,非常重要。
题目名称 | 来源 | 个人题解 | 备注 |
---|---|---|---|
64.两数相加 | Leetcode题2:戳我前往 | 戳我前往 | 链表的加法问题 |
65.链表的中间结点 | Leetcode题876:戳我前往 | 戳我前往 | 快慢指针思想 |
66.删除链表的倒数第N个节点 | Leetcode题19:戳我前往 | 戳我前往 | 哑节点和双指针 |
67.合并两个有序链表 | Leetcode题21:戳我前往 | 戳我前往 | 链表的递归处理 |
68.合并K个排序链表 | Leetcode题23:戳我前往 | 戳我前往 | 优先队列的使用 |
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
715734107926)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新