LCR 078. 合并 K 个升序链表 既然每个链表都是升序的,那么合并后的第一个节点一定是某个链表的头节点 合并后的第二个节点,可能是某个链表的头节点,也可能是第一个节点的下一个节点 所以我们需要把所有可能是下一个节点的节点放在一个集合中,并且最小的可以自动浮起来,即最小堆 /** * Definition for singly-linked l…
More content:LeetCode hot100@动态规划&多维动态规划 DP是由前一个状态推导而出,而贪心是在局部直接选择最优 DP五部曲: 确定dp数组以及下标的含义 确定递推公式(状态转移公式) dp数组如何初始化 确定遍历顺序 举例推导dp数组 01背包模板: for(int i = 0; i < weight.siz…
More content:力扣题记之贪心 121. 买卖股票的最佳时机✅ 简单贪心 也可DP class Solution { public: int maxProfit(vector<int>& prices) { int res = 0; int mny = 0; for(int i = 1; i < prices.s…
More content:LeetCode hot100@图论 大纲 深搜与广搜 并查集 最小生成树 Kruskal prim 拓扑排序 最短路算法 dijkstra(单源) Bellman_ford(单源&负权) Floyd(多源) 代码框架 dfs vector<vector<int>> result; // 保…
More content:LeetCode hot100@贪心 55. 跳跃游戏❌ 一开始想的是跳向最大长度之间中下标最大的,发现不行 不要拘泥于跳到哪,而是能跳到哪,即关注能跳到的范围 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围) 整体最优解:最后得到整体最大覆盖范围,看是否能到终点 class Solution { public: …
More content:力扣题记之图论 200. 岛屿数量✅ 简单岛屿问题 注意本题的grid数组类型是char 因此grid[i][j] == '1'不能简写为grid[i][j] class Solution { private: int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0}; int …
136. 只出现一次的数字❌ 如果能用sort函数或者set容器就很简单,可惜不允许 异或解决 class Solution { public: int singleNumber(vector<int>& nums) { int res = 0; for(int num : nums) { res ^= num; } retur…
More content:力扣题记之动态规划 70. 爬楼梯✅ dp数组下标代表当前在第几阶,数组value表示到这一阶的方法数(即爬到第i层楼梯,有dp[i]种方法) 遍历顺序从前往后 但是一开始没想明白为什么状态转移公式是dp[i] = dp[i-1] + dp[i-2] 只是找规律推出来的 class Solution {public: in…
More content:LeetCode hot100@回溯 回溯算法可解决的问题类型: 组合问题:N个数里面按一定规则找出k个数的集合 17. 电话号码的字母组合 39. 组合总和 40. 组合总和 II 216. 组合总和 III 77. 组合 切割问题:一个字符串按一定规则有几种切割方式 93. 复原 IP 地址 131. 分割回文串 子集…
More content:力扣题记之回溯 回溯是递归的副产物,只要有递归就会有回溯 回溯算法模板:回溯递归是往深处找,内部for遍历是横向找 void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点; backtrack…