# LeetCode刷题笔记 **Repository Path**: nnu-cz/leetcode ## Basic Information - **Project Name**: LeetCode刷题笔记 - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-05-18 - **Last Updated**: 2022-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **Leecode刷题笔记** 包含不同的[数据结构](#1-数据结构)和不同的[算法](#2-算法)总结 # 1. 数据结构 ## 1.1. 数组 + **动态规划** + **栈和队列** [1.两数之和](Array/1.两数之和.md) [4.寻找两个正序数组的中位数](Array/4.寻找两个正序数组的中位数.md) [11.盛最多水的容器](Array/11.盛最多水的容器.md) [15.三数之和](Array/15.三数之和.md) [31.下一个排列](Array/31.下一个排列.md) [33.搜索旋转排序数组](Divide/33.搜索旋转排序数组.md) [34.在排序数组中查找元素第一个和最后一个位置](Divide/34.在排序数组中查找元素第一个和最后一个位置.md) [39.组合总和](Array/39.组合总和.md) [46.全排列](Array/46.全排列.md) [48.旋转图像](Array/48.旋转图像.md) [53.最大子序和](Array/53.最大子序和.md) [54.螺旋矩阵](Array/54.螺旋矩阵.md) [55.跳跃游戏](Slide_win/55.跳跃游戏.md) [56.合并区间](Slide_win/56.合并区间.md) [62.不同路径](DP/62.不同路径.md) [63.不同路径Ⅱ](DP/63.不同路径Ⅱ.md) [64.最小路径和](DP/64.最小路径和.md) [75.颜色分类](Array/75.颜色分类.md) [85.最大矩形](Array/85.最大矩形.md) [120.三角形最小路径和](DP/120.三角形最小路径和.md) [122.买股票的最佳时机](DP/122.买股票的最佳时机.md) [122.买股票的最佳时机](DP/139.单词拆分.md) [128.最长连续数列](Array/128.最长连续数列.md) [130.被围绕的区域](Divide/130.被围绕的区域.md) [136.只出现一次的数字](Math/136.只出现一次的数字.md) [139.单词拆分](DP/139.单词拆分.md) [152.乘积的最大子数组](DP/152.乘积的最大子数组.md) [169. 多数元素](Math/169.%20多数元素.md) [174.地下城游戏](DP/174.地下城游戏.md) [198.打家劫舍](DP/198.打家劫舍.md) [213.打家劫舍Ⅱ](DP/213.打家劫舍Ⅱ.md) [221.最大正方形](DP/221.最大正方形.md) [239.滑动窗口最大值](Slide_win/239.滑动窗口最大值.md) [240.搜索二维矩阵%20II](Array/240.搜索二维矩阵%20II.md) [300.最长递增子序列](Array/300.最长递增子序列.md) [309. 最佳买卖股票时机含冷冻期](Array/309.%20最佳买卖股票时机含冷冻期.md) [403. 青蛙过河](DP/403.%20青蛙过河.md) [406.根据身高重建队列](Array/406.根据身高重建队列.md) [448.找到所有数组中消失的数字](Array/448.找到所有数组中消失的数字.md) [494.目标和](Array/494.目标和.md) [581.最短无序连续子数组](Array/581.最短无序连续子数组.md) [739.每日温度](Stack/739.每日温度.md) [剑指Offer53-II.0~n-1中缺失的数字](Array/剑指Offer53-II.%200~n-1中缺失的数字.md) [剑指 Offer 56 - I. 数组中数字出现的次数](Math/剑指%20Offer%2056%20-%20I.%20数组中数字出现的次数.md) [剑指 Offer 56 - II. 数组中数字出现的次数 II](Math/剑指%20Offer%2056%20-%20II.%20数组中数字出现的次数%20II.md) ## 1.2. 字符串 [3.无重复字符的最长子串](Slide_win/3.无重复字符的最长子串.md) [5.最长回文子串](Slide_win/5.最长回文子串.md) [10.正则表达式](DP/10.正则表达式.md) [17.电话号码的字母组合](Divide/17.电话号码的字母组合.md) [32.最长有效括号](Stack/32.最长有效括号.md) [49.字母异位词分组](Array/49.字母异位词分组.md) [71.简化路径](Stack/71.简化路径.md) [72.编辑距离](DP/72.编辑距离.md) [91.解码方法](DP/91.解码方法.md) [131.分割回文串](Divide/131.%20分割回文串.md) [139.单词拆分](DP/139.单词拆分.md) [208.实现Trie(前缀树)](Tree/208.实现Trie(前缀树).md) [301.删除无效的括号](Stack/301.删除无效的括号.md) [394.字符串解码](Stack/394.字符串解码.md) [395.至少有K个重复字符的最长子串](Slide_win/395.至少有K个重复字符的最长子串.md) [424.替换后的最长重复字符](Slide_win/424.替换后的最长重复字符.md) [438.找到字符串中所有异位词](Slide_win/438.找到字符串中所有异位词.md) [557.反转字符串中的单词III](Stack/557.反转字符串中的单词III.md) ## 1.3. 链表 **多数为双指针的使用** [2.两数相加](List/2.两数相加.md) [19.删除倒数第N个节点](List/19.删除倒数第N个节点.md) [21.合并两个有序链表](List/21.合并两个有序链表.md) [23.合并k个升序链表](List/23.合并k个升序链表.md) [61.旋转链表](List/61.旋转链表.md) [141.环形链表](List/141.环形链表.md) [142.环形链表Ⅱ](List/142.环形链表Ⅱ.md) [146.LRU缓存机制](List/146.LRU缓存机制.md) [147.对链表进行插入排序](List/147.对链表进行插入排序.md) [148.排序链表](List/148.排序链表.md) [160.相交链表](List/160.相交链表.md) ## 1.4. 树 + **四种遍历方式(preOrder,inOrder,postOrder,levelOrder)** + **左右子树分治思想** 以上两种思路可以解决绝大多数树的问题 [95.不同的二叉搜索树](Tree/95.不同的二叉搜索树.md) [96.不同的二叉搜索树](DP/96.不同的二叉搜索树.md) [98.验证二叉搜索树](Tree/98.验证二叉搜索树.md) [99.恢复搜索二叉树](Tree/99.恢复搜索二叉树.md) [101.对称二叉树](Tree/101.对称二叉树.md) [102. 二叉树的层序遍历](Tree/102.%20二叉树的层序遍历.md) [103. 二叉树的锯齿形层序遍历](Tree/103.%20二叉树的锯齿形层序遍历.md) [105.从前序和中序遍历构造二叉树](Tree/105.从前序和中序遍历构造二叉树.md) [108.有序数组转化为二叉搜索树](Tree/108.有序数组转化为二叉搜索树.md) [109.有序链表转化为二叉搜索树](Tree/109.有序链表转化为二叉搜索树.md) [113.路径总和Ⅱ](Tree/113.路径总和Ⅱ.md) [114.二叉数展开为链表](Tree/114.二叉数展开为链表.md) [124.二叉树中的最大路径](Tree/124.二叉树中的最大路径.md) [129.求根节点到叶节点数字之和](Tree/129.求根节点到叶节点数字之和.md) [144.二叉树的前序遍历](Tree/144.二叉树的前序遍历.md) [145.二叉树的后续遍历](Tree/145.二叉树的后续遍历.md) [173.二叉搜索树迭代器](Tree/173.二叉搜索树迭代器.md) [208.实现Trie(前缀树)](Tree/208.实现Trie(前缀树).md) [226.翻转二叉树](Tree/226.翻转二叉树.md) [230.二叉搜索树中第K小](Tree/230.二叉搜索树中第K小.md) [297.二叉树的序列化与反序列化](Tree/297.二叉树的序列化与反序列化.md) [337.打家劫舍20III](DP/337.打家劫舍%20III.md) [437.路径总和III](Tree/437.路径总和III.md) [剑指Offer33.二叉搜索树的后序遍历序列](Tree/剑指Offer33.二叉搜索树的后序遍历序列.md) [剑指Offer36.二叉搜索树与双向链表](Tree/剑指Offer36.二叉搜索树与双向链表.md) # 2. 算法 ## 2.1. 数学方法 + **位运算** + **数学公式的使用,如拉格朗日定理,矩阵快速幂等** [70.爬楼梯](DP/70.爬楼梯.md) [136.只出现一次的数字](Math/136.只出现一次的数字.md) [169. 多数元素](Math/169.%20多数元素.md) [279.完全平方数](Math/279.完全平方数.md) [338. 比特位计数](Math/338.%20比特位计数.md) [剑指 Offer10-II.20青蛙跳台阶问题](DP/剑指Offer10-II.%20青蛙跳台阶问题.md) [剑指 Offer14-20-I.剪绳子](Math/剑指Offer14-%20I.剪绳子.md) [剑指 Offer 16. 数值的整数次方](Math/剑指%20Offer%2016.%20数值的整数次方.md) [剑指 Offer43.1~n整数中1出现的次数](Math/剑指%20Offer43.1~n整数中1出现的次数.md) [剑指 Offer 56 - I. 数组中数字出现的次数](Math/剑指%20Offer%2056%20-%20I.%20数组中数字出现的次数.md) [剑指 Offer 56 - II. 数组中数字出现的次数 II](Math/剑指%20Offer%2056%20-%20II.%20数组中数字出现的次数%20II.md) [剑指 Offer 62.圆圈中最后剩下的数字](Math/剑指%20Offer%2062.%20圆圈中最后剩下的数字.md) ## 2.2. 动态规划 **主要利用记忆化搜索的方式,将当前问题转化为已经有解的子问题,关键在于寻找状态转移方差** **对于由简单子问题得到的转移方程,可以省去DP数组的空间占用** [10.正则表达式](DP/10.正则表达式.md) [53.最大子序和](Array/53.最大子序和.md) [62.不同路径](DP/62.不同路径.md) [63.不同路径Ⅱ](DP/63.不同路径Ⅱ.md) [64.最小路径和](DP/64.最小路径和.md) [70.爬楼梯](DP/70.爬楼梯.md) [72.编辑距离](DP/72.编辑距离.md) [85.最大矩形](Array/85.最大矩形.md) [91.解码方法](DP/91.解码方法.md) [96.不同的二叉搜索树](DP/96.不同的二叉搜索树.md) [120.三角形最小路径和](DP/120.三角形最小路径和.md) [122.买股票的最佳时机](DP/122.买股票的最佳时机.md) [136.只出现一次的数字](Math/136.只出现一次的数字.md) [139.单词拆分](DP/139.单词拆分.md) [152.乘积的最大子数组](DP/152.乘积的最大子数组.md) [174.地下城游戏](DP/174.地下城游戏.md) [198.打家劫舍](DP/198.打家劫舍.md) [213.打家劫舍Ⅱ](DP/213.打家劫舍Ⅱ.md) [221.最大正方形](DP/221.最大正方形.md) [297.二叉树的序列化与反序列化](Tree/297.二叉树的序列化与反序列化.md) [300.最长递增子序列](Array/300.最长递增子序列.md) [309. 最佳买卖股票时机含冷冻期](Array/309.%20最佳买卖股票时机含冷冻期.md) [322.零钱兑换](DP/322.零钱兑换.md) [337.打家劫舍20III](DP/337.打家劫舍%20III.md) [403. 青蛙过河](DP/403.%20青蛙过河.md) [494.目标和](Array/494.目标和.md) [560.和为K的子数组](Array/560.和为K的子数组.md) [剑指 Offer 60. n个骰子的点数](DP/剑指%20Offer%2060.%20n个骰子的点数.md) ## 2.3. 排序 + **快排和堆排序适合查找第K大的元素** + **归并主要利用分治思想** + **基数和桶排序适合元素种类少的情况** [147.对链表进行插入排序](List/147.对链表进行插入排序.md) [148.排序链表](List/148.排序链表.md) [164.最大间距](Sort/164.最大间距.md) [179.最大数](Sort/179.最大数.md) [207.课程表](Stack/207.课程表.md) [347.前K个高频元素](Array/347.前%20K%20个高频元素.md) [406.根据身高重建队列](Array/406.根据身高重建队列.md) [剑指 Offer 21.调整数组顺序使奇数位于偶数前面](Array/剑指%20Offer%2021.调整数组顺序使奇数位于偶数前面.md) [剑指 Offer 40.最小的k个数](Sort/剑指%20Offer%2040.%20最小的k个数.md) ## 2.4. 查找 + **出现有序的数组可以通过二分查找降低时间复杂度** + **哈希查找** [3.无重复字符的最长子串](Slide_win/3.无重复字符的最长子串.md) [4.寻找两个正序数组的中位数](Array/4.寻找两个正序数组的中位数.md) [31.下一个排列](Array/31.下一个排列.md) [33.搜索旋转排序数组](Divide/33.搜索旋转排序数组.md) [34.在排序数组中查找元素第一个和最后一个位置](Divide/34.在排序数组中查找元素第一个和最后一个位置.md) [49.字母异位词分组](Array/49.字母异位词分组.md) [56.合并区间](Slide_win/56.合并区间.md) [75.颜色分类](Array/75.颜色分类.md) [128.最长连续数列](Array/128.最长连续数列.md) [240.搜索二维矩阵 II](Array/240.搜索二维矩阵%20II.md) [300.最长递增子序列](Array/300.最长递增子序列.md) [347.前K个高频元素](Array/347.前%20K%20个高频元素.md) [448.找到所有数组中消失的数字](Array/448.找到所有数组中消失的数字.md) [554.砖墙](Array/554.砖墙.md) [581.最短无序连续子数组](Array/581.最短无序连续子数组.md) [621.任务调度器](Sort/621.任务调度器.md) [剑指Offer11.旋转数组的最小数字](Divide/剑指Offer11.旋转数组的最小数字.md) [剑指Offer53-II.0~n-1中缺失的数字](Array/剑指Offer53-II.%200~n-1中缺失的数字.md) ## 2.5. 遍历和回溯 + **树的四种遍历** + **图的两种遍历(深度优先DFS和广度优先BFS)** [17.电话号码的字母组合](Divide/17.电话号码的字母组合.md) [22.括号生成](Divide/22.括号生成.md) [39.组合总和](Array/39.组合总和.md) [46.全排列](Array/46.全排列.md) [48.旋转图像](Array/48.旋转图像.md) [78.子集](Divide/78.子集.md) [79.单词搜索](Divide/79.单词搜索.md) [102. 二叉树的层序遍历](Tree/102.%20二叉树的层序遍历.md) [103. 二叉树的锯齿形层序遍历](Tree/103.%20二叉树的锯齿形层序遍历.md) [124.二叉树中的最大路径](Tree/124.二叉树中的最大路径.md) [130.被围绕的区域](Divide/130.被围绕的区域.md) [131.分割回文串](Divide/131.%20分割回文串.md) [200.岛屿数量](Divide/200.岛屿数量.md) [207.课程表](Stack/207.课程表.md) [301.删除无效的括号](Stack/301.删除无效的括号.md) [337.打家劫舍20III](DP/337.打家劫舍%20III.md) [437.路径总和III](Tree/437.路径总和III.md) [剑指Offer13.机器人的运动范围](Divide/剑指Offer13.机器人的运动范围.md) [剑指Offer36.二叉搜索树与双向链表](Tree/剑指Offer36.二叉搜索树与双向链表.md) [剑指Offer38.字符串的排列](Divide/剑指Offer38.字符串的排列.md) ## 2.6. 双指针 + **对撞指针** + **快慢指针** + **滑动窗口** [3.无重复字符的最长子串](Slide_win/3.无重复字符的最长子串.md) [5.最长回文子串](Slide_win/5.最长回文子串.md) [11.盛最多水的容器](Array/11.盛最多水的容器.md) [15.三数之和](Array/15.三数之和.md) [55.跳跃游戏](Slide_win/55.跳跃游戏.md) [56.合并区间](Slide_win/56.合并区间.md) [141.环形链表](List/141.环形链表.md) [142.环形链表Ⅱ](List/142.环形链表Ⅱ.md) [160.相交链表](List/160.相交链表.md) [239.滑动窗口最大值](Slide_win/239.滑动窗口最大值.md) [395.至少有K个重复字符的最长子串](Slide_win/395.至少有K个重复字符的最长子串.md) [424.替换后的最长重复字符](Slide_win/424.替换后的最长重复字符.md) [438.找到字符串中所有异位词](Slide_win/438.找到字符串中所有异位词.md) [剑指Offer11.旋转数组的最小数字](Divide/剑指Offer11.旋转数组的最小数字.md) [剑指Offer21.调整数组顺序使奇数位于偶数前面](Array/剑指%20Offer%2021.调整数组顺序使奇数位于偶数前面.md) [剑指 Offer 57 - II. 和为s的连续正数序列](Slide_win/剑指offer57-Ⅱ.和为s的连续正数序列.md) ## 2.7. 栈和队列 + **栈对括号和字符匹配应用较多** + **队列对广度优先搜索和层次遍历应用较多** [32.最长有效括号](Stack/32.最长有效括号.md) [42.接雨水](Stack/42.接雨水.md) [71.简化路径](Stack/71.简化路径.md) [84.柱状图中最大的矩形](Stack/84.柱状图中最大的矩形.md) [130.被围绕的区域](Divide/130.被围绕的区域.md) [207.课程表](Stack/207.课程表.md) [394.字符串解码](Stack/394.字符串解码.md) [581.最短无序连续子数组](Array/581.最短无序连续子数组.md) [557.反转字符串中的单词III](Stack/557.反转字符串中的单词III.md) [739.每日温度](Stack/739.每日温度.md) [剑指Offer31.栈的压入弹出序列](Stack/剑指Offer31.栈的压入弹出序列.md)