
leetcode
2021-4-30开始,刷题
Stdleohao
这个作者很懒,什么都没留下…
展开
-
剑指offer刷题笔记
思路原创 2022-04-24 09:17:29 · 196 阅读 · 0 评论 -
动态规划notebook
动态规划原创 2022-03-29 18:14:24 · 278 阅读 · 0 评论 -
单调栈notebook
文章目录[739. 每日温度](https://leetcode-cn.com/problems/daily-temperatures/)小结739. 每日温度class Solution {public: vector<int> dailyTemperatures(vector<int>& temperatures) { // 分三种情况,温度 // 1. 小于栈顶,入栈 // 2. 等于栈顶,入栈原创 2022-03-04 22:49:59 · 184 阅读 · 0 评论 -
贪心解题notebook
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。文章目录[455. 分发饼干](https://leetcode-cn.com/problems/assign-cookies/)小结455. 分发饼干class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { // 从小到大的排序,一一对应 // wrong.原创 2021-12-09 11:30:23 · 367 阅读 · 0 评论 -
回溯notebook
回溯模板for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。回溯和递归是相辅相成的。回溯法的效率,回溯法其实就是暴力查找,并不是什么高效的算法。回溯法解决的问题都可以抽象为树形结构(N叉树)回溯法可以解决几类问题,可以看出每一类问题都不简单。组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按原创 2021-11-17 15:45:26 · 409 阅读 · 0 评论 -
39. 组合总和
题目链接class Solution {public: vector<vector<int>> result; vector<int> path; //int sum = 0; void backtracking1(vector<int> candidates, int target, int sum, int startIndex) { if (sum >= target) {原创 2021-10-13 22:37:55 · 99 阅读 · 0 评论 -
216. 组合总和 III(回溯)
题目链接class Solution { vector<vector<int>> result; vector<int> path; int sum = 0; void backtracking(int n, int k, int startIndex) { if (sum > n) { // 剪枝操作 return; // 如果path.size() == k 但sum != target原创 2021-10-12 19:38:53 · 109 阅读 · 0 评论 -
77. 组合(回溯)
题目链接class Solution { vector<vector<int>> result; vector<int> path; void backtracking(int n, int k, int startIndex) { // 终止条件 if (path.size() == k) { result.push_back(path); return;原创 2021-10-12 18:34:57 · 106 阅读 · 0 评论 -
2021-10-10
题目链接class Solution {public: int numSquares(int n) { // 下标 dp[j] 和为j的最少完全平方数个数 // 初始化 0 // dp[j] = min(dp[j - i * i] + 1, dp[j]) // 顺序无关 vector<int> dp(n + 1, INT_MAX); // !!! dp[0] = 0;原创 2021-10-10 20:03:11 · 96 阅读 · 0 评论 -
322. 零钱兑换(完全背包问题)
题目链接class Solution {public: int coinChange(vector<int>& coins, int amount) { // 下标 dp[j] 组成j的最小硬币数 // 初始化 dp(amount + 1, INT_MAX) dp[0] = 1 // -1的情况 // 递推公式 dp[j] = min(dp[j - conis[i]], dp[j]) // 顺序原创 2021-10-10 19:19:08 · 130 阅读 · 0 评论 -
70. 爬楼梯
题目链接class Solution {public: int climbStairs(int n) { // 下标 dp[j] ,到j层台阶需要的方法 // 初始化 dp[0]=1 // 递推 dp[j] += dp[j-nums[i]] // 顺序 外层背包,内存物品 // int nums[2] = {1, 2}; vector<int> dp(n+1, 0); d原创 2021-10-10 18:56:07 · 84 阅读 · 0 评论 -
377. 组合总和 Ⅳ(完全背包问题)
题目链接class Solution {public: int combinationSum4(vector<int>& nums, int target) { vector<int> dp(target + 1, 0); dp[0] = 1; for (int j = 0; j <= target; j++) { for (int i = 0; i < nu原创 2021-10-07 22:32:05 · 126 阅读 · 0 评论 -
518. 零钱兑换 II(完全背包问题)
题目链接class Solution {public: int change(int amount, vector<int>& coins) { // 完全背包问题 // 组合数问题,不需考虑顺序 // 凑成总金额j的货币组合数为dp[j] // dp[j] += dp[j - coins[i]] vector<int> dp(amount + 1, 0); //原创 2021-10-06 15:18:08 · 138 阅读 · 0 评论 -
474. 一和零(0,1背包)
题目链接class Solution {public: int findMaxForm(vector<string>& strs, int m, int n) { // 初始化 vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0)); // 先获取每个元素有的0,1数目 for (string str : strs) {原创 2021-10-06 15:03:10 · 136 阅读 · 0 评论 -
494. 目标和
题目链接class Solution {public: int findTargetSumWays(vector<int>& nums, int target) { int sum = 0; for (int i = 0; i < nums.size(); i++) { sum += nums[i]; } // left - (sum - left) = target原创 2021-10-04 23:32:58 · 114 阅读 · 0 评论 -
1049. 最后一块石头的重量 II
题目链接class Solution {public: int lastStoneWeightII(vector<int>& stones) { // 使用01背包解决,分两堆石头,装一半的石头,让两边的石头重量尽可能的接近 // 最后背包装下的就是一半可以抵消的质量 vector<int> dp(1501, 0); int sum = 0; for (int i = 0; i &l原创 2021-10-03 20:42:12 · 139 阅读 · 0 评论 -
判定字符是否唯一
题目链接class Solution {public: bool isUnique(string astr) { /** 法1 使用数组解决 由于没指定字符是字母,假设是ASCII编码共128个 int achar[128]; for (int i = 0; i < 128; i++) { achar[i] = 0; }原创 2021-10-02 16:44:40 · 303 阅读 · 0 评论 -
416. 分割等和子集(动态规划01背包)
题目链接思路总结转化为01背包问题,每个数字都只能用一次目标:背包正好装满,说明找到了总和为 sum / 2 的子集。定义dp[j],背包容量为j的时候装下的价值递推公式dp[j] = max(dp[j], dp[j - num[i]] + num[i])初始化全0遍历顺序物体循环放在外循环,背包容量放在内循环且内循环为倒叙class Solution {public: bool canPartition(vector<int>& nums) {原创 2021-10-01 20:17:39 · 160 阅读 · 0 评论 -
将有序数组转换为二叉搜索树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-09-04 22:53:02 · 120 阅读 · 0 评论 -
把二叉搜索树转换为累加树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-09-04 22:51:09 · 104 阅读 · 0 评论 -
669. 修剪二叉搜索树(递归和迭代)
题目链接递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr原创 2021-09-02 23:45:50 · 175 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-31 23:13:16 · 98 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-30 22:00:56 · 120 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-29 23:11:09 · 94 阅读 · 0 评论 -
98. 验证二叉搜索树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-29 23:00:27 · 108 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-28 19:28:00 · 101 阅读 · 0 评论 -
617. 合并二叉树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-28 19:19:23 · 104 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-25 11:44:28 · 99 阅读 · 0 评论 -
654. 最大二叉树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-23 23:26:16 · 114 阅读 · 0 评论 -
560. 和为K的子数组
题目链接class Solution {public: int subarraySum(vector<int>& nums, int k) { unordered_map<int, int> m; m[0] = 1; int count = 0; int pre = 0; for (auto& i : nums) { pre += i;原创 2021-08-22 22:49:16 · 104 阅读 · 0 评论 -
112. 路径总和I、113. 路径总和 II、437. 路径总和 III
题目链接1. 判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * T原创 2021-08-20 23:38:29 · 147 阅读 · 0 评论 -
404. 左叶子之和
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-19 22:22:37 · 106 阅读 · 0 评论 -
100. 相同的树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-18 21:15:27 · 93 阅读 · 0 评论 -
513. 找树左下角的值(层序遍历)
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-17 21:40:11 · 201 阅读 · 0 评论 -
257. 二叉树的所有路径(回溯)
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-16 19:20:31 · 172 阅读 · 0 评论 -
110. 平衡二叉树
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-15 20:04:37 · 161 阅读 · 0 评论 -
222.完全二叉树的节点个数(层序、后序)
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-13 13:35:58 · 140 阅读 · 0 评论 -
111. 二叉树的最小深度(层序、递归)
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *///递归class Solution {public: int minDepth(TreeNode原创 2021-08-13 12:25:42 · 139 阅读 · 0 评论 -
104. 二叉树的最大深度(层序遍历、后序)
题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-12 11:52:23 · 140 阅读 · 0 评论 -
101. 对称二叉树(递归、迭代)
题目地址/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {原创 2021-08-11 19:12:32 · 189 阅读 · 0 评论