快速拿下面试算法
在面试前一周,我刷了很多道算法,分类刷,有些是做过的,因为我是面试C++相关岗位,除了leetcode与剑指offer相关的算法,还需要手撕一些智能指针呀,单例模式呀、字符串呀、LRU、排序算法等等。
本节主要是以速训练算法及review基础为目的,内含60+道算法,代码量及涉及算法统计如下:
Languages
| language | files | code | comment | blank | total |
|---|---|---|---|---|---|
| C++ | 49 | 4,146 | 633 | 353 | 5,132 |
Directories
| path | files | code | comment | blank | total |
|---|---|---|---|---|---|
| . | 49 | 4,146 | 633 | 353 | 5,132 |
| bfs_dfs | 6 | 695 | 92 | 57 | 844 |
| dp | 12 | 533 | 134 | 54 | 721 |
| dp/rob | 1 | 30 | 8 | 4 | 42 |
| dp/剪绳子 | 1 | 30 | 10 | 1 | 41 |
| dp/博弈论 | 1 | 61 | 22 | 5 | 88 |
| dp/戳气球 | 1 | 21 | 9 | 2 | 32 |
| dp/接雨水 | 1 | 153 | 13 | 14 | 180 |
| dp/最大编辑距离 | 1 | 60 | 10 | 6 | 76 |
| dp/背包 | 5 | 151 | 53 | 21 | 225 |
| dp/贪心 | 1 | 27 | 9 | 1 | 37 |
| hash | 1 | 135 | 17 | 14 | 166 |
| link | 7 | 196 | 108 | 19 | 323 |
| recursion_backtracke | 1 | 40 | 8 | 3 | 51 |
| sliding_window | 2 | 69 | 17 | 6 | 92 |
| slidingwindow | 1 | 230 | 19 | 15 | 264 |
| sort | 2 | 165 | 20 | 12 | 197 |
| stack | 1 | 67 | 9 | 3 | 79 |
| sum问题 | 2 | 287 | 27 | 20 | 334 |
| tree | 3 | 864 | 80 | 62 | 1,006 |
| 二分 | 1 | 116 | 13 | 9 | 138 |
| 手撕算法 | 10 | 749 | 89 | 79 | 917 |
| 手撕算法/heap | 4 | 277 | 40 | 39 | 356 |
| 手撕算法/kmp | 1 | 46 | 18 | 4 | 68 |
| 手撕算法/lru | 1 | 137 | 1 | 8 | 146 |
| 手撕算法/string | 1 | 106 | 8 | 8 | 122 |
| 手撕算法/单例模式 | 2 | 60 | 14 | 9 | 83 |
| 手撕算法/智能指针 | 1 | 123 | 8 | 11 | 142 |
可以看到上述总共5k行代码,相信两周左右的时间是可以review完毕的!
具体涉及算法如下:
-
dfs
463.岛屿的周长
695.岛屿的最大面积
200.岛屿的数量
694.不同岛屿的数量
305.岛屿数量II
773. 滑动谜题
-
链表
24. 两两交换链表中的节点
25. K 个一组翻转链表
92. 反转链表 II
160. 相交链表
2.两数之和
剑指 Offer 24. 反转链表
面试题 02.05. 链表求和
动态规划
-
背包问题
手撕0-1背包
416.分割等和子集
518.零钱兑换 II
70. 爬楼梯
322. 零钱兑换
-
博弈论
877. 石子游戏
-
贪心
柠檬找零
-
其他
312. 戳气球
剑指 Offer 14- I. 剪绳子
剑指 Offer 14- II. 剪绳子 I
42.接雨水
860. 柠檬水找零
72. 编辑距离
-
-
二分
排序数组,平方后,数组当中有多少不同的数字(相同算一个)
一个数据先递增再递减,找出数组不重复的个数,比如 [1, 3, 9, 1],结果为3,不能使用额外空间,复杂度o(n)
递增数组,找出和为k的数对
给出一个数组nums,一个值k,找出数组中的两个下标 i,j 使得 nums[i] + nums[j] = k
-
滑动窗口
3.无重复字符的最长子串
字符串的排列
-
排序
插入排序
冒泡排序
快速排序
三路快排
归并排序
-
sum问题
两数之和
三数之和
nSum
大数之和
-
栈
71.简化路径
-
哈希表及Union-Find
128.最长连续序列
一个无序数组,从小到大找到第一个缺的数,比如[8 2 4 3 6 9 7 11 12],第一个缺的就是5
31.下一个排列
55.跳跃游戏
AB两个排序数组,原地合并数组。(A当中穿插一些无效数字怎么处理?)
-
树
手撕二叉树操作
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
剑指 Offer 68 - II. 二叉树的最近公共祖先
337. 打家劫舍 III
100.相同的树
前中后非递归遍历及递归遍历
剑指 Offer 54. 二叉搜索树的第k大节点
222. 完全二叉树的节点个数
257. 二叉树的所有路径
129. 求根到叶子节点数字之和
最小路径和
124. 二叉树中的最大路径和
112.路径总和
113.路径总和 II
剑指 Offer 07. 重建二叉树
-
手撕算法相关
手撕lru
手撕memcpy、strcpy、strnpy、strlen、strstr、strcat、strcmp
手撕智能指针
手撕kmp
手撕单例
手撕堆
手撕两种线程安全的单例模式
scoped_ptr
autpo_ptr
unique_ptr
shared_ptr
为了拒绝白嫖,我自己写的代码获取方式,可私聊我微信(没加的,点击公众号右下角联系我)并支付9.9红包发你。