Leetcode刷题学习记录
文章平均质量分 51
Leetcode刷题学习记录
mmaerd
这个作者很懒,什么都没留下…
展开
-
双指针 Leetcode 15 三数之和
要点:1、如果用哈希表则在处理输出数组去重时较复杂;原创 2024-05-04 18:53:50 · 440 阅读 · 0 评论 -
迪杰斯特拉算法
华为20240417机考。原创 2024-04-24 16:59:12 · 219 阅读 · 0 评论 -
图论基础知识 并查集/例题
学习记录自。原创 2024-04-24 18:02:56 · 585 阅读 · 0 评论 -
数组 Leetcode 704 二分查找/Leetcode 59 螺旋矩阵/Leetcode 203移除链表元素
学习记录自二分法模板记忆,数值分析中牛顿迭代法。原创 2024-04-30 00:03:39 · 330 阅读 · 4 评论 -
动态规划 Leetcode 516 最长回文子序列
2.递推公式:if(s[i] == s[j]) dp[i][j] = dp[i+1][j-1]+2;要点:1.dp数组定义为:dp[i][j]为区间是s[i:j]内最长回文子序列;4.遍历顺序:for(int i = n-2;3.dp数组初始化dp[i][i] = 1, 其余为0。原创 2024-04-04 19:35:18 · 218 阅读 · 0 评论 -
动态规划 Leetcode 647 回文子串
要点:1.dp[i][j]定义为以区间s[i:j]是否为回文,是为true,否则为false;3.遍历时注意方向和起始值for(int i = n-1;2.递推公式(递推方法:从中间往两边递推):if(s[i]==s[j])原创 2024-04-04 19:00:23 · 344 阅读 · 0 评论 -
图论基础知识 深度优先(Depth First Search, 简称DFS),广度优先(Breathe First Search, 简称BFS)
学习记录自。原创 2024-04-22 23:47:18 · 1002 阅读 · 0 评论 -
动态规划 Leetcode 583 两个字符串的删除操作
else dp[i][j] = min(dp[i][j-1]+1, min(dp[i-1][j]+1,dp[i-1][j-1]+2) (删除word1[i-1],删除word2[j-1],或者同时删除)dp[i][j-1] = dp[i-1][j-1]+1所以可以简化为else dp[i][j] = min(dp[i][j-1]+1, dp[i-1][j]+1)2.递推公式:if(word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1]原创 2024-04-04 16:50:56 · 221 阅读 · 0 评论 -
动态规划 Leetcode 72 编辑距离
else dp[i][j] = min(dp[i-1][j]+1, min(dp[i][j-1]+1, dp[i-1][j-1]+1))删除word1[i-1],删除word2[j-1],(插入和删除相同), 替换。要点:1.dp数组定义:dp[i][j]以word1[i-1]结尾时将其转换为word2[0:j-1]需要的最少操作数;2.递推公式:if(word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1]j++) dp[0][j] = j;原创 2024-04-04 17:50:14 · 365 阅读 · 0 评论 -
动态规划 Leetcode 392 判断子序列
要点:1.dp[i]以nums[i-1]结尾时最大子数组和,此时不用初始化dp[0]为nums[0],如果为nums[i]结尾则需要初始化;2.递推公式: dp[i] = max(nums[i-1], dp[i-1] + nums[i-1]);3.返回的是dp的最大值。原创 2024-04-03 15:29:58 · 273 阅读 · 0 评论 -
动态规划 Leetcode 1035 不相交的线
要点:1.dp[i][j]定义为长度为nums1[0:i-1]和nums2[0:j-1]时最大连线数,此时dp数组初始化为0即可;2.递推公式if(nums1[i-1]==nums2[j-1]) dp[i][j] = dp[i-1][j-1] + 1。原创 2024-04-03 14:18:51 · 297 阅读 · 0 评论 -
动态规划 Leetcode 115 不同的子序列
2.dp数组定义时元素类型为uint64_t/uint32_t,因为int为有符号数范围为-2147483648 到 2147483647,小于部分测试用例的结果;3.dp数组初始化for(int i = 0;要点:1.dp[i][j]含义为以是s[i-1]结尾时s中t[0:j-1]的个数;原创 2024-04-04 16:00:32 · 261 阅读 · 0 评论 -
动态规划 Leetcode 1143 最长公共子序列
dp数组定义不同结果不同,如果定义为dp数组dp[i][j]含义为以text1[i]结尾和以text2[j]结尾时最大的公共子序列长度则会超时(超时方法),定义为dp数组dp[i][j]含义为以长度为[0,i]的text1和长度为[0,j]的text2最大的公共子序列长度则可以通过,区别主要在递推公式上;原创 2024-04-02 01:12:20 · 225 阅读 · 0 评论 -
动态规划 Leetcode 718 最长重复子数组
要点:1.想到dp数组二维表达的含义;2.想到正确初始化dp数组,3.两层遍历都要从0开始;原创 2024-04-01 00:27:15 · 1225 阅读 · 0 评论 -
动态规划 Leetcode 714 买卖股票的最佳时机含手续费
3.dp数组初始化,dp[i][0-1]代表利润,所以不持有股票后利润最小为0,初始化为dp[0][0] = -prices[0],dp[0][1] = 0。要点:1.两种状态持有股票和不持有股票;原创 2024-03-30 14:48:17 · 980 阅读 · 0 评论 -
动态规划 Leetcode 300 最长递增子序列
3. 返回不能直接返回dp[n-1],因为此时dp[n-1]代表的是以nums[n-1]结尾的最大递增子序列的长度,所以此时要返回dp数组的最大值;要点:1.dp数组含义:dp[i]代表以nums[i]结尾的最长递增子序列的长度;原创 2024-03-30 15:39:04 · 786 阅读 · 0 评论 -
动态规划 Leetcode 674 最长连续递增序列
要点:1.dp[i]定义为nums[i]结尾的连续最长递增蓄力,则正向遍历,递推时,如果是连续序列,则只比较nums[i]和nums[i-1],若是可以不连续则可以,则需要比较i之前的nums[j](j = 0:i)与nums[i]的大小。方法二:dp[i]定义为以nums[i]开始的连续最长递增序列,则反向遍历。方法一:dp[i]定义为nums[i]结尾的连续最长递增蓄力,则正向遍历。原创 2024-03-30 16:31:18 · 224 阅读 · 0 评论 -
动态规划 Leetcode 309 买卖股票的最佳时机含冷冻期
要点:1.想清楚每天有几种状态,此题一天有四种状态:持有股票,保持之前卖出股票,今天卖出股票,冷冻期;原创 2024-03-26 00:11:55 · 225 阅读 · 0 评论 -
动态规划 Leetcode 188 买卖股票的最佳时机IV
这道题,只不过多了几轮,循坏递推就可以。原创 2024-03-25 23:12:35 · 256 阅读 · 0 评论 -
动态规划 Leetcode 123 买卖股票的最佳时机III
要点:1.需要想清楚每天有四种状态,持有第一支股票-不持有第一支股票-持有第二支股票-不持有第二支股票,从而明确出dp数组的定义;2.递推公式想到对每个状态分别做递归,并且四个状态有时序关系,所以每个状态一定是和前一个状态有关联,如此寻找到递归关系表达式;4.不持有股票可以是i-1天就已经不持有股票,也可以是在当天卖出股票,同样取两者种较大值;3.持有股票不一定就要当天买入股票,也有可能i-1天买入股票,两者取较大值递归;原创 2024-03-21 23:17:55 · 306 阅读 · 0 评论 -
动态规划 Leetcode 121 买卖股票的最佳时机
2.动态规划想到dp数组定义为dp[j][0]和dp[j][1],每一天有两个状态持有股票0以及不持有股票1时所得最多现金,得到递推公式。要点:1.贪心算法想到用一个变量来记录遍历数据的最小值left,另一个变量记录左右差。,并且最后不持有股票一定比持有股票现金多。原创 2024-03-21 13:15:20 · 614 阅读 · 0 评论 -
动态规划 Leetcode 337 打家劫舍III
3.单次递归逻辑(递归公式)分偷父节点和不偷父节点两种情况,且不偷父节点时左右节点可以偷也可以不偷需要取较大值;2.dp数组想到为长度为2,dp[0]代表不选该节点,dp[1]代表选该节点;要点:1.二叉树遍历顺序想到为后续遍历;原创 2024-03-19 14:45:00 · 242 阅读 · 0 评论 -
动态规划 Leetcode 213 打家劫舍II
要点:1.分情况,分别考虑带首元素和尾元素,然后返回两者中的较大值;原创 2024-03-19 13:23:50 · 222 阅读 · 0 评论 -
动态规划 Leetcode 139 单词拆分
要点在注释中详细说明,注意迭代公式中是dp[i]不是dp[j-i]原创 2024-03-19 00:18:12 · 232 阅读 · 0 评论 -
动态规划 Leetcode 198 打家劫舍
要点:1.递推公式,如果偷第j间房(下标从1开始)则。原创 2024-03-19 12:42:33 · 1059 阅读 · 0 评论 -
动态规划 Leetcode 279 完全平方数
3.注意C语言中有符号数和无符号数的用法,注意C语言中使用unsigned int,不然UINT_MAX+1如果转换为int类型会按有符号数处理,值变为-1;2.完全背包问题,完全平方数可以无限选,外层物品遍历,内层背包容量遍历;要点:1.背包容量为n,物品为完全平方数,重量为其数值大小,价值为1;原创 2024-03-18 21:51:48 · 194 阅读 · 0 评论 -
动态规划 Leetcode 322 零钱兑换
4.在迭代判断时要跳过dp[j-coins[i]] == INT_MAX这种情况,并且此时也没有比较的必要,但是不能不加这个条件,因为UINT_MAX+1会回滚到0导致迭代出错;3.dp数组初始化,因为是min所以dp[0] = 0, 其余值初始化为UINT_MAX;要点:1.背包容量为amount,物品重量为coins[i],物品价值为1;2.因为求最小值递推公式为。原创 2024-03-18 00:14:42 · 488 阅读 · 0 评论 -
动态规划 完全背包问题 爬楼梯进阶版
要点:1.抽象为完全背包问题,容量为n阶楼梯,物品和其价值均为1-m;3.先遍历物品再遍历背包求组合数,反之求排列数,本题求排列;原创 2024-03-16 17:08:41 · 270 阅读 · 0 评论 -
动态规划 Leetcode 377 组合总和IV
【代码】动态规划 Leetcode 377 组合总和IV。原创 2024-03-16 15:05:11 · 175 阅读 · 0 评论 -
动态规划 Leetcode 518 零钱兑换II
3.遍历顺序选择:先物品再背包求组合数,先背包再物品求排列数;2.递推公式dp[j] += dp[j-coins[i]];要点:1.完全背包问题;原创 2024-03-16 14:42:02 · 269 阅读 · 0 评论 -
动态规划 完全背包问题 携带研究材料
携带研究材料]https://kamacoder.com/problempage.php?要点:1.完全背包问题中物品可以选无数次,所以相比于01背包问题,在遍历背包容量时需要正向遍历。原创 2024-03-15 00:17:39 · 512 阅读 · 0 评论 -
动态规划 Leetcode 474 一和零
要点:1.背包容量为二维,物品重量为数组元素长度,价值为1;3.数组初始化也仿照01背包问题,没有负数则数组值初始化为0。2.仍是01背包问题,递推公式仿照。原创 2024-03-14 23:34:40 · 608 阅读 · 0 评论 -
动态规划 Leetcode 494 目标和
要点:1.想到±代表其实求的是连个组合的差值,进而记left为正组合,right为负组合,则有。2.想到以上面所求left为背包容量,得到dp[j]含义为装满背包容量j的组合方法数目;4.dp数组初始化时dp[0]为1,其余为0否则递推公式会无效。3.求组和数目的递推公式一般为。原创 2024-03-14 22:55:51 · 1094 阅读 · 0 评论 -
动态规划 Leetcode 1049 最后一块石头的重量
要点:1.想到求最后剩下石头的重量可以转化为求石头组合重量最接近石头重量总和的一半和此时剩下石头重量的差值,从而联想到。此题便可以相同套路求解。原创 2024-03-14 00:46:27 · 264 阅读 · 0 评论 -
动态规划 Leetcode 416 分割等和子集
要点:1.想到将问题转化为01背包问题,且想到背包容量为。,物品重量和价值均为。原创 2024-03-14 00:17:20 · 763 阅读 · 0 评论 -
动态规划 携带研究材料
要点:1.01背包问题,通用解法,先学习理论再求解;原创 2024-03-13 00:11:00 · 154 阅读 · 0 评论 -
动态规划 Leetcode 96 不同的二叉搜索树
要点:1.递推公式,想到以根节点数字不同作为分类条件求和得到dp[i];原创 2024-03-12 23:17:27 · 213 阅读 · 0 评论 -
动态规划 Leetcode 343 整数划分
要点:1.递推公式要想到,从2开始找规律;原创 2024-03-12 22:07:00 · 280 阅读 · 0 评论 -
动态规划 Leetcode 63 不同路径II
2.初始化dp数组时需要想到dp[i][0]=1,dp[0][j]=1,但是如果首行首列某个点为障碍则其后面点均无法达到dp数组在这些点为0,障碍点处无法达到dp数组在障碍点为0;要点:1.需要想到几个特殊输入,起始和末尾位置有障碍则直接返回0;原创 2024-03-12 00:20:39 · 273 阅读 · 0 评论 -
动态规划 Leetcode 62 不同路径
要点:1.二维表格,想到(i,j)去代表其坐标,dp数组也因此为二维数组;的上一步只能是其左边或上边,所以。原创 2024-03-11 22:24:19 · 1051 阅读 · 0 评论