https://github.com/RickeyBoy/LeetCodeGists/blob/master/dataStructure/Basic.md
https://github.com/RickeyBoy/LeetCodeGists/blob/master/dataStructure/ListNode.md
https://github.com/RickeyBoy/LeetCodeGists/blob/master/dataStructure/BinaryTree.md
https://github.com/RickeyBoy/LeetCodeGists/blob/master/dataStructure/BinaryHeap.md
https://github.com/RickeyBoy/LeetCodeGists/blob/master/dataStructure/UnionFind.md
- 固定窗口大小
- 可变窗口,求解最大or最小的满足条件的窗口
- 固定窗口:同时移动左右指针,保证窗口宽度一定
- 可变窗口:分别移动左右指针
- 移动后需要及时更新状态位、最优解等
“连续子串 xxxx”、“连续子数组 xxxx”
/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {
unordered_map<char, int> need, window; // 有时可以直接用 vector 替代
int left = 0, right = 0;
int sameCount = 0;
// 初始化
for (char c : t) need[c]++;
while (right < s.size()) {
// 右移窗口
right++;
...
/*** debug 输出的位置 ***/
printf("window: [%d, %d)\n", left, right);
/********************/
// 判断左侧窗口是否要收缩
while (window needs shrink) {
// 左移窗口
left++;
...
}
}
}
- 3. Longest Substring Without Repeating Characters 无重复字符的最长子串 - medium
- 76. Minimum Window Substring 最小覆盖子串 - hard
- 567. Permutation in String 字符串的排列 - medium
- 992. Subarrays with K Different Integers K 个不同整数的子数组 - hard
- 438. Find All Anagrams in a String 找到字符串中所有字母异位词 - medium
- (同向)快慢指针:链表、环形数组
- (反向)双向指针:线性数组字符串等
- (同向)滑动窗口:独立章节分析
- (反向)二分查找:独立章节分析
- 141. Linked List Cycle 环形链表 - easy
- 142. Linked List Cycle II 环形链表 II - medium
- 202. Happy Number 快乐数 - easy
- 876. Middle of the Linked List 链表的中间结点 - easy
- 1. Two Sum 两数之和 - easy
- 15. 3Sum 三数之和 - medium
- 16. 3Sum Closest 最接近的三数之和 - medium
- 18. 4Sum 四数之和 - medium
- 11. Container With Most Water 盛最多水的容器 - medium
- 26. Remove Duplicates from Sorted Array 删除排序数组中的重复项 - easy
- 27. Remove Element 移除元素 - easy
- 注意二分的边界条件
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size()-1;
while (right >= left) {
int mid = (right - left) / 2 + left;
if (nums[mid]==target) {
return mid;
} else if (nums[mid]<target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
};
- 704. binary Search 二分查找 - easy
- 69. Sqrt(x) x 的平方根 - easy
- 278. First Bad Version 第一个错误的版本 - easy
- 33. Search in Rotated Sorted Array 搜索旋转排序数组 - medium
- 34. Find First and Last Position of Element in Sorted Array 在排序数组中查找元素的第一个和最后一个位置 - medium
- 定义通用 dfs 函数,函数需要拼上每一步需要的参数
- 递归调用
“输出所有可能结果”
- 617. Merge Two Binary Trees 合并二叉树 - easy
- 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先 - medium
- 301. Remove Invalid Parentheses 删除无效的括号 - hard
- 定义通用 bfs 函数,函数需要拼上每一步需要的参数
- 递归调用,每一次递归都需要探索当前的所有可能
- 通常可以转化为二叉树 or 图的问题
- "二叉树"、"区域(图)"
- 102. Binary Tree Level Order Traversal 二叉树的层次遍历 - medium
- 200. Number of Islands 岛屿数量 - medium
- 279. Perfect Squares 完全平方数 - medium
- 标准回溯:递归 + 回溯
- 广义回溯:递归,全排列
- 维护当前进行的步骤情况
- “全排列”、“全部组合”
- 22. Generate Parentheses 括号生成 - medium
- 39. Combination Sum 组合总和 - medium
- 40. Combination Sum II 组合总和 II - medium
- 51. N-Queens - hard
- 52. N-QueensII - hard
- 78. Subsets 子集 - medium
- 79. Word Search 单词搜索 - medium
- 一维线性递推公式
- 可以使用特征根
- 70. Climbing Stairs 爬楼梯 - easy
- 509. Fibonacci Number 斐波那契数 - easy
- 264. Ugly Number II 丑数 II - medium
- 状态转移数组:
dp[背包容量][可选择的物品]
- 状态转移方程:
dp[i][w] = max(dp[i - 1][w - wt[i-1]] + val[i-1], dp[i - 1][w]);
- 是否可以状态压缩?
/* 01背包算法框架 */
int knapsack(int W, int N, vector<int>& wt, vector<int>& val) {
// base case 已初始化
vector<vector<int>> dp(N + 1, vector<int>(W + 1, 0));
for (int i = 1; i <= N; i++) {
for (int w = 1; w <= W; w++) {
if (w - wt[i-1] < 0) {
// 这种情况下只能选择不装入背包
dp[i][w] = dp[i - 1][w];
} else {
// 装入或者不装入背包,择优
dp[i][w] = max(dp[i - 1][w - wt[i-1]] + val[i-1],
dp[i - 1][w]);
}
}
}
return dp[N][W];
}
- 子集背包: 416. Partition Equal Subset Sum 分割等和子集 - medium
- 01 背包:
- 494. Target Sum 目标和 - medium
- 474. Ones and Zeroes 一和零 - medium
- 完全背包:518. Coin Change 2 零钱兑换 II - medium
- 一维的 dp 数组(二维的压缩版)
- 二维的 dp 数组
int n = array.length;
int[] dp = new int[n];
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
dp[i] = 最值(dp[i], dp[j] + ...)
}
}
int n = arr.length;
int[][] dp = new dp[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (arr[i] == arr[j])
dp[i][j] = dp[i][j] + ...
else
dp[i][j] = 最值(...)
}
}
- LCS:1143. Longest Common Subsequence 最长公共子序列 - medium
- LCS:516. Longest Palindromic Subsequence 最长回文子序列 - medium
- 编辑距离:72. Edit Distance 编辑距离 - hard
dp[x][y][z]
的含义就是:今天是第 x 天,至今最多进行 y 次交易,我现在z(持有or未持有)着股票
// base case:
dp[-1][k][0] = dp[i][0][0] = 0
dp[-1][k][1] = dp[i][0][1] = -infinity
// 状态转移方程:
dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i])
dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])
- 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机 - easy
- 122. Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II - easy
- 123. Best Time to Buy and Sell Stock III 买卖股票的最佳时机 III - hard
- 188. Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV - hard
- 309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期 - medium
- 714. Best Time to Buy and Sell Stock with Transaction Fee 买卖股票的最佳时机含手续费 - medium
Todo
模板:Trie 字典树
- 139. Word Break 单词拆分 - medium
- 208. Implement Trie (Prefix Tree) 实现 Trie (前缀树) - medium
- 211. Design Add and Search Words Data Structure 添加与搜索单词 - 数据结构设计 - medium
TODO
- 面试题 04.06. 后继者 - medium
https://github.com/RickeyBoy/LeetCodeGists/blob/master/series/sort.md
https://zhuanlan.zhihu.com/p/61166108
Longest Palindromic Subsequence,最长回文子序列Longest Palindromic Substring,最长回文子字符串Count of Palindromic Substrings,最长子字符串的个数问题Minimum Deletions in a String to make it a Palindrome,怎么删掉最少字符构成回文Palindromic Partitioning,怎么分配字符,形成回文
- 1. Two Sum 两数之和 - easy
- 15. 3Sum 三数之和 - medium
- 16. 3Sum Closest 最接近的三数之和 - medium
- 18. 4Sum 四数之和 - medium
- 51. N-Queens - hard
- 52. N-QueensII - hard
- 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机 - easy
- 122. Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II - easy
- 123. Best Time to Buy and Sell Stock III 买卖股票的最佳时机 III - hard
- 188. Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV - hard
- 309. Best Time to Buy and Sell Stock with Cooldown 最佳买卖股票时机含冷冻期 - medium
- 714. Best Time to Buy and Sell Stock with Transaction Fee 买卖股票的最佳时机含手续费 - medium