做研发多年,对算法理解一直不够成体系,基本是每次在面试校招的时候才会去重点看算法(避免被校招sspp反刷)。因此在这里,把我多年的总结发出来,希望晚辈站在一个高的位置学习。
最新链接:有道云笔记
--------------------------------------------
高频算法题——每次跳槽刷一遍
结合之前的面试经历和刷leetcode的经历,总结了100多道题
怎么用这个文档:
1)如果你还有1-2个月开始面试,那就跟着这个文档一道一道的写吧,看看里面说的解法是否符合你的预期,不符合,总结自己的思路即可,怎么简单,怎么有助于你记忆,就怎么总结。
2)如果你还有1-2周开始面试,那我相信你已经刷了不少题了,那就跟着这个文档一道一道过,思考自己能否写出来,感觉能写出来的,直接过下一道,感觉把握不大的,再写一遍吧。
同志们,加油冲啊,拿下高薪offer,就差最后这一步“强化记忆”了!
TOP 113
- 两数之和:1:unordered_map遍历LC
解法一:暴力算法,时间复杂度:n^2 ;解法2:定一个hashmap ,降低复杂度为N
两数相加:注意最后的进位不为0,
- 两数相加:2:注意最后的进位不为0;
1:迭代,相同位的值可以想加,定一个进位值;
2:递归:定义一个递归方法,传入两个链表和进位值;
- 无重复字符最长子串:滑动窗口
解法:定一个左指针和最大值,然后进行遍历值是否在hashmap里
滑动窗口题目:
- 寻找两个正序数组的中位数:相当于找两个有序数组的第k大的数,二分,先判断k/2和小数组长度大小。
解法:hard级别难在怎么把代码写优雅
解法一:两个数组归并排序之后,取中间值;
解法二:通过切换加二分法查找,但是我没看懂
- 最长回文子串: 二维动态规划
dp[i] [j] = dp[i + 1] [j - 1]. if s[i + 1] [j - 1] 注意这个循环的遍历,外层是len from 0 to n,内层是i from 0 to n,j = i + len
解法1:中心扩展法
解法2:动态规划
- 整数反转:7:注意是否越界,可以用INT_MAX / 10或者INT_MIN / 10判断一下
- 字符串转整数atoi:8:主要就是越界的处理,和6一样,注意一点的就是-12 % 10 = -2,LC
- 正则表达式匹配:10:二维动态规划或者递归求解。LC
解法 dp[i] [j]:s的前i个和p的前j个是否匹配,dp[i] [0] = false, dp[0] [j] = dp[0] [j - 2] if p[j - 1] == '*' dp[0] [0] = true
- 盛最多水的容器:11 :双指针,每次选择小的方向往前/往后移动 LC 最简公式,三目表达式
- 罗马数字转整数: 一次遍历,遍历到第i时,看i + 1的数字,来判断+还是-。LC
- 数字转罗马数字:这个就把所有的罗马数字对应的数字列举出来,然后循环相减。 LC
- 最长公共前缀:横向比较,每次取两个算出最长公共前缀,得到的结果和后面一个继续算。LC
时间复杂度:横纵查找 mn m 为数据里字符串平均长度,n为数量 优化方向是增加2分查找
- 三数之和:排序+双指针 LC
解法:要关注数据重复的情况,时间复杂度:O(N^2)
- 电话号码的字母组合:当循环数不定时,就去递归/回溯吧。【超级经典回溯题】
解法:回溯解法
回溯相关文章汇总
| 题目 |
题解 |
题解 |
难度等级 |
| 中等 |
|||
| 中等 |
|||
| 中等 |
|||

最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



