个人力扣题目分类记录

目录

  • 思维
    • 模拟
    • 前缀和
    • 差分
    • 快速选择
    • 快排三分
    • 分治
    • 扫描线
  • 递归
    • 模拟栈
    • 单调栈
  • 哈希
  • 二分查找
    • 边界问题
      • 最大值
      • 最小值
  • 搜索回溯
    • 单纯回溯
    • 较复杂
      • 剪枝 dfs
      • 回溯 + 状压
      • 构图bfs
      • 记忆化搜索
      • 回溯+ dp·
      • 博弈问题(dp)
  • BFS 迭代
    • 复杂
  • 快速幂
  • 双指针
    • 绕弯题
    • 快慢指针题
    • 边界固定()
    • 二分
    • 滑动窗口
  • 桶思想
  • 链表
  • 位运算
    • 状压
      • 状压dp(deep dark hard)
  • 字符串
    • 栈模拟
    • 回文串
    • 字符串运算
    • 二叉树
      • 层序遍历
      • 先序遍历
      • 中序遍历
      • 二叉搜索树
    • 树 + dfs(递归)
    • 树 + bfs(迭代)
      • 构建树
    • 简单题
    • bfs
    • 拓扑排序
    • 并查集
    • 最短路
      • Dijkstra
      • bellmen ford
    • 二分颜色图
  • dp
    • 线性dp
    • 树形 dp
    • 矩阵dp
  • 数学
  • 数据结构设计
    • 字典树

思维

454. 四数相加 II
189. 轮转数组
41. 缺失的第一个正数
253. 会议室 II
334. 递增的三元子序列
2195. 向数组中追加 K 个整数
5253. 找到指定长度的回文数

模拟

999. 可以被一步捕获的棋子数
统计星号
2105. 给植物浇水 II
1503. 所有蚂蚁掉下来前的最后一刻
1535. 找出数组游戏的赢家

前缀和

2100. 适合打劫银行的日子
724. 寻找数组的中心下标

差分

2251. 花期内花的数目 好题
732. 我的日程安排表 III
1589. 所有排列中的最大和
1674. 使数组互补的最少操作次数
995. K 连续位的最小翻转次数

快速选择

215. 数组中的第K个最大元素

快排三分

324. 摆动排序 II

分治

395. 至少有 K 个重复字符的最长子串 也算是双指针吧
218. 天际线问题

扫描线

递归

841. 钥匙和房间

模拟栈

5236. 美化数组的最少删除数

单调栈

剑指 Offer II 038. 每日温度 经典
1475. 商品折扣后的最终价格


绕点弯
316. 去除重复字母
901. 股票价格跨度
735. 行星碰撞


这三题一个思路
84. 柱状图中最大的矩形
85. 最大矩形
2104. 子数组范围和


2334. 元素值大于变化阈值的子数组

哈希

如果哈希表 dic
可以直接取 dic 中的数(val)

for(auto kv : dic)
{
	kv.second;
}

930. 和相同的二元子数组
350. 两个数组的交集 II
面试题 01.04. 回文排列

二分查找

边界问题

二分查找无非是找最大值或者最小值

最大值

寻找右边界,即左边都符合答案 → 使用二分模板right_bound

 //找右边界:左边符合 → 求最大值
    const check = (m)=>{} //符合函数
    let [l,r] = [0,n-1] //左右边界
    while(l < r){
        const m = Math.ceil((l+r)/2)  //向上取整,防止向下取整l = m时卡死
        //符合要求:其左边的全部符合要求
        if(check(m)) l = m
        //不符要求:其右边的全部不符要求
        else r = m-1 
    } 

    if(check(l)) return l //已经找到,可以在左边加入哨兵元素,使得一定可以找到该元素
    else return -1//没有找到

这里 l 从 0 开始,实际上可能没有找到,所以最后是否可以输出 l 做了一个check判断,如果为 false,实际上是没有找到的,并不是找到了 0 这个位置,所以要return -1;

当然还有一种方法就是一开始 l = -1 开始找,最后就不用判断check,直接判断 l == -1.

275. H 指数 II
[222. 完全二叉树的节点个数](https://leetcode-cn.com/problems/count-
1292. 元素和小于等于阈值的正方形的最大边长complete-tree-nodes/)

最小值

寻找左边界,即右边都符合答案 → 使用二分模板lower_bound

 //找左边界:右边符合 → 求最小值
    const check = (m)=>{} //符合函数
    let [l,r] = [,] //左右边界
    while(l < r){
        const m = Math.floor((l+r)/2) //向下取整,向上取整会在r = m时卡死
        //符合要求:其右边的全部符合要求
        if(check(m)) r = m
        //不符要求:其左边的全部不符要求
        else l = m+1 
    } 
    if(check(l)) return l //已经找到,可以在右边加入哨兵元素,使得一定可以找到该元素
    else return -1 //没有找到

436. 寻找右区间


(不限于左右指针,仅仅是二分思想的题)
1608. 特殊数组的特征值
1898. 可移除字符的最大数目
1870. 准时到达的列车最小时速 小数转换,除法转换很有用
1283. 使结果不超过阈值的最小除数
1712. 将数组分成三个子数组的方案数
1574. 删除最短的子数组使剩余数组有序个人感觉二分里的难题…

自己做了不少堆题的一些总结:
小根堆 & 大根堆:
小根 == 大顶 == less< T > == return a < b; == 小的优先级高 == 堆中是较小的数且越小越在堆底 == top 出来的是堆顶 ,是较小值中的最大值 == pop出来的是更大的值
可以搭配top() pop(),,正是因为每次取出优先级小的,并丢出优先级小的

703. 数据流中的第 K 大元素
面试题 17.09. 第 k 个数
347. 前 K 个高频元素
973. 最接近原点的 K 个点
1337. 矩阵中战斗力最弱的 K 行
priority_queue q(greater>(), move(power)); 右值引用,很强
373. 查找和最小的 K 对数字 比较难受的题,虽然看上去跟上面两个差不多 关于pair如何自定义比较方法有解答
786. 第 K 个最小的素数分数 这题和上面那个都可以体会一下自定义pair如何写
778. 水位上升的泳池中游泳
295. 数据流的中位数 两个堆
1606. 找到处理最多请求的服务器

搜索回溯

单纯回溯

1079. 活字印刷
200. 岛屿数量 经典
733. 图像渲染
剑指 Offer II 086. 分割回文子字符串
756. 金字塔转换矩阵
剑指 Offer II 085. 生成匹配的括号
1376. 通知所有员工所需的时间
784. 字母大小写全排列
386. 字典序排数
529. 扫雷游戏

较复杂

417. 太平洋大西洋水流问题
52. N皇后 II
1391. 检查网格中是否存在有效路径 很绕…
LCP 31. 变换的迷宫

剪枝 dfs

565. 数组嵌套
473. 火柴拼正方形 698 跟这个很像,但是官方加了测试698回溯剪枝超时
301. 删除无效的括号
60. 排列序列
679. 24 点游戏

回溯 + 状压

1239. 串联字符串的最大长度

构图bfs

127. 单词接龙

记忆化搜索

6110. 网格图中递增路径的数目 模板题
638. 大礼包
329. 矩阵中的最长递增路径
140. 单词拆分 II

回溯+ dp·

131. 分割回文串
741. 摘樱桃

博弈问题(dp)

486. 预测赢家
877. 石子游戏 这俩一模一样,但是dfs 超时,应该用dp

BFS 迭代

剑指 Offer II 105. 岛屿的最大面积 经典
1254. 统计封闭岛屿的数目 先写200更佳
1306. 跳跃游戏 III
1905. 统计子岛屿
1091. 二进制矩阵中的最短路径 一般最短路用BFS,DFS会超时

复杂

433. 最小基因变化

快速幂

50. Pow(x, n)

双指针

151. 颠倒字符串中的单词
349. 两个数组的交集
832. 翻转图像 0 变成 1 ,1 变成 0 grid[i][j] ^= 1;


18. 四数之和
611. 有效三角形的个数


绕弯题

283. 移动零
581. 最短无序连续子数组
838. 推多米诺
38. 外观数列
面试题 01.03. URL化
面试题 16.16. 部分排序
45. 跳跃游戏 II
541. 反转字符串 II
826. 安排工作以达到最大收益

快慢指针题

80. 删除有序数组中的重复项 II
141. 环形链表 太经典了
142. 环形链表 II
202. 快乐数
457. 环形数组是否存在循环 有点绕

边界固定()

340. 至多包含 K 个不同字符的最长子串
713. 乘积小于K的子数组
1456. 定长子串中元音的最大数目

二分

还有啊,关于这个二分区间。

>= 都满足, r =mid 。所以 l < r。

875. 爱吃香蕉的珂珂
658. 找到 K 个最接近的元素
1894. 找到需要补充粉笔的学生编号
1498. 满足条件的子序列数目
378. 有序矩阵中第 K 小的元素两层二分,有点绕

滑动窗口

438. 找到字符串中所有字母异位词
1052. 爱生气的书店老板


1004. 最大连续1的个数 IIIt
2024. 考试的最大困扰度


桶思想

621. 任务调度器

链表

2. 两数相加
86. 分隔链表
138. 复制带随机指针的链表

位运算

面试题 01.01. 判定字符是否唯一

状压

1371. 每个元音包含偶数次的最长子字符串
78. 子集
90. 子集 II
216. 组合总和 III

847. 访问所有节点的最短路径 状压 + BFS

状压dp(deep dark hard)

1994. 好子集的数目
698. 划分为k个相等的子集 怪题,不好分析

字符串

面试题 01.09. 字符串轮转
2109. 向字符串添加空格

栈模拟

394. 字符串解码

回文串

125. 验证回文串
5. 最长回文子串 dp
131. 分割回文串
564. 寻找最近的回文数
5237. 得到回文串的最少操作次数 更像是递归题

字符串运算

415. 字符串相加 模板题
43. 字符串相乘

力扣 auto 链表或者树这种有指针的结构,不改变值
不要使用auto&

二叉树

2196. 根据描述创建二叉树

层序遍历

102. 二叉树的层序遍历
103. 二叉树的锯齿形层序遍历
116. 填充每个节点的下一个右侧节点指针

先序遍历

114. 二叉树展开为链表
297. 二叉树的序列化与反序列化

中序遍历

98. 验证二叉搜索树

二叉搜索树

938. 二叉搜索树的范围和
108. 将有序数组转换为二叉搜索树
98. 验证二叉搜索树

树 + dfs(递归)

111. 二叉树的最小深度


112. 路径总和
113. 路径总和 II
这俩放一块学习更好


95.不同的二叉搜索树 II

树 + bfs(迭代)

1609. 奇偶树


构建树

654. 最大二叉树

简单题

1042. 不邻接植花

bfs

5300. 有向无环图中一个节点的所有祖先 更像 bfs
1466. 重新规划路线
2039. 网络空闲的时刻
752. 打开转盘锁

1129. 颜色交替的最短路径 稍微多一个步骤需要记录颜色

拓扑排序


207. 课程表
210. 课程表 II 与 剑指 Offer II 113. 课程顺序 一样


1462. 课程表 IV
2050. 并行课程 III 拓扑+ dp
2049. Count Nodes With the Highest Score
802. 找到最终的安全状态
310. 最小高度树
269. 火星词典 vip
1591. 奇怪的打印机 II hard
913. 猫和老鼠 有亿点难

并查集


一个方法
261. 以图判树 Tplus
684. 冗余连接
1101. 彼此熟识的最早时间 完整模板,配套rank,size加速


399. 除法求值


6106. 统计无向图中无法互相到达点对数
947. 移除最多的同行或同列石头 并查集 + 哈希
1319. 连通网络的操作次数
959. 由斜杠划分区域 跟上面那个很像,只是这题不好发现如何并


稍微难一点
721. 账户合并 很绕,但是还是并查集
1202. 交换字符串中的元素 稍微绕了一点点,还好的题
924. 尽量减少恶意软件的传播

1697. 检查边长度限制的路径是否存在 很秀的一题,动态的构建并查集

最短路

Dijkstra

743. 网络延迟时间 模板题
1631. 最小体力消耗路径 有点难
2203. 得到要求路径的最小带权子图 好题!!!

bellmen ford

787. K 站中转内最便宜的航班

二分颜色图

785. 判断二分图
886. 可能的二分法

dp

85. 最大矩形
1526. 形成目标数组的子数组最少增加次数

线性dp

6100. 统计放置房子的方式数
53. 最大子数组和 经典
6103. 从树中删除边的最小分数 53的变种

树形 dp

337. 打家劫舍 III
96. 不同的二叉搜索树

矩阵dp

面试题 17.23. 最大黑方阵

数学

166. 分数到小数
390. 消除游戏

数据结构设计

字典树

211. 添加与搜索单词 - 数据结构设计
133. 克隆图
146. LRU 缓存

你可能感兴趣的:(LeetCode,算法,leetcode)