leetcode
文章平均质量分 71
leetcode 刷题日志
SUBURBIA~
这个作者很懒,什么都没留下…
展开
-
LeetCode 12 / 100
LeetCode 3. 无重复字符的最长子串LeetCode 438. 找到字符串中所有字母异位词LeetCode 560. 和为 K 的子数组LeetCode 239. 滑动窗口最大值LeetCode 76. 最小覆盖子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。找到字符串中所有字母异位词给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。输入:原创 2024-03-19 23:36:11 · 752 阅读 · 0 评论 -
LeetCode 7 / 100
LeetCodeLeetCodeLeetCodeLeetCode [283. 移动零](https://leetcode.cn/problems/move-zeroes/?LeetCode [11. 盛最多水的容器](https://leetcode.cn/problems/container-with-most-water/description/?LeetCode [15. 三数之和](https://leetcode.cn/problems/3sum/description/?原创 2024-03-16 23:56:38 · 1008 阅读 · 0 评论 -
ACM java 输入输出
【代码】ACM java 输入输出。原创 2024-04-16 16:18:28 · 330 阅读 · 0 评论 -
LeetCode 21 / 100
LeetCode 73. 矩阵置零LeetCode 54. 螺旋矩阵LeetCode 48. 旋转图像LeetCode 240. 搜索二维矩阵 II给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。用 O(1)O(1)O(1) 空间用 matrix 第一行和第一列记录该行该列是否有0,作为标志位但是对于第一行,和第一列要设置一个标志位,为了防止自己这一行(一列)也有0的情况.一个标记螺旋矩阵给你一个 m 行 n 列原创 2024-03-21 21:23:54 · 1101 阅读 · 2 评论 -
LeetCode 17 / 100
LeetCode 53. 最大子数组和LeetCode 56. 合并区间LeetCode 189. 轮转数组LeetCode 238. 除自身以外数组的乘积LeetCode 41. 缺失的第一个正数给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回原创 2024-03-20 22:32:06 · 1533 阅读 · 0 评论 -
笔试刷题1
小红有一个长度为 n 的数组 a ,她每次会询问区间 [l,r] 中所有数字拼接起来是否是 3 的倍数。小红有一个长度为 n 的数组a,记 f(l,r,x) 为区间 [l,r] 内 x 的出现次数。接下来的q行,每行输入2个整数,表示询问的 [l,r] 区间。1原创 2024-04-16 13:10:28 · 599 阅读 · 0 评论 -
完结撒花,继续加油
于是在去年年末下定决心,报名了30期训练营,也加入了知识星球,到今天随想录除了图论部分都刷过了一遍,如果没有报名现在应该不会是这个进度,且很大程度上不会有每天刷题的习惯,后面继续保持,加油。23年四五月份开始按照随想录刷题,但是由于还要做实验,学习进度时断时续,无法保持连贯性。每当再度回顾之前刷过的题目,往往又会觉得陌生,仿佛从未接触过一样。原创 2024-03-16 14:51:20 · 365 阅读 · 0 评论 -
代码随想录算法训练营第六十天 | 单调栈 柱状图中最大的矩形 完结撒花
LeetCode。原创 2024-03-15 09:03:12 · 552 阅读 · 0 评论 -
代码随想录算法训练营第五九天 | 下一个更大元素II、接雨水
LeetCode 503.下一个更大元素IILeetCode 42. 接雨水给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。接雨水暴力也是使用双指针。按照列来计算的话,宽度一定是1了,我们再把每一列的雨水的高度求出来就可以了。只原创 2024-03-13 10:32:20 · 1133 阅读 · 0 评论 -
代码随想录算法训练营第五八天 | 单调栈
LeetCode 739. 每日温度LeetCode 496.下一个更大元素 I给定一个整数数组 ,表示每天的温度,返回一个数组 ,其中 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 来代替。单调栈: 通常是一维数组,要寻找任一个元素的右边或左边第一个比自己大或者小的元素的位置,此时用单调栈。时间复杂度为 O(n)O(n)O(n)。单调栈的本质是空间换时间,在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。就原创 2024-03-12 11:05:51 · 365 阅读 · 0 评论 -
代码随想录算法训练营第五七天 | 回文子串、最长回文子序列
LeetCode 647. 回文子串LeetCode 516.最长回文子序列给你一个字符串 s ,请你统计并返回这个字符串中 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。判断字符串s 是否是回文,如果知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话,这个字符串s 就是回文串。找到递归关系:判断一个子原创 2024-03-11 14:36:56 · 924 阅读 · 0 评论 -
代码随想录算法训练营第五五天 | 两个字符串的删除操作、编辑距离
LeetCode 583. 两个字符串的删除操作LeetCode 72. 编辑距离给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。本题也可以求最长公共子序列,最后再 编辑距离给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符 那么说明不用任何编辑, 就应该是 ,原创 2024-03-09 15:29:05 · 382 阅读 · 0 评论 -
代码随想录算法训练营第五四天 | 判断子序列、不同的子序列
LeetCode 392.判断子序列LeetCode 115.不同的子序列不同的子序列给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109+710^9 + 7109+7 取模。原创 2024-03-08 12:43:57 · 345 阅读 · 0 评论 -
代码随想录算法训练营第五三天 | 最长公共子序列、不相交的线、最大子序和
LeetCode 1143.最长公共子序列 LeetCode 1035.不相交的线LeetCode 53. 最大子序和 和最长重复(连续)子数组的相同点是:不改变字符的相对顺序不同是:删除某些字符(也可以不删除任何字符)后组成的新字符串一致即可。所以要考虑 的情况:取 与 的最长公共子序列 和 与 的最长公共子序列,取最大的。即:原创 2024-03-08 10:09:55 · 424 阅读 · 0 评论 -
代码随想录算法训练营第五二天 | 递增子序列、最长重复子数组
LeetCode 300.最长递增子序列LeetCode 674. 最长连续递增序列LeetCode 674. 最长连续递增序列最长连续递增序列不连续递增子序列的跟前 个状态有关,连续递增的子序列只跟前状态有关最长重复子数组给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。原创 2024-03-06 11:09:47 · 425 阅读 · 0 评论 -
代码随想录算法训练营第五一天 | 买股票3
LeetCode 309.最佳买卖股票时机含冷冻期LeetCode 714.买卖股票的最佳时机含手续费给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。原创 2024-03-05 09:54:42 · 390 阅读 · 0 评论 -
代码随想录算法训练营第五十天 | 买股票2
LeetCode 123.买卖股票的最佳时机III LeetCode 123.买卖股票的最佳时机IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。达到dp[i][1]状态:同理 ,其他类似原创 2024-03-04 10:12:10 · 419 阅读 · 0 评论 -
代码随想录算法训练营第四八天 | 买股票
LeetCode 121. 买卖股票的最佳时机LeetCode 122. 买卖股票的最佳时机II给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。可买卖多次给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你原创 2024-03-02 21:15:12 · 431 阅读 · 0 评论 -
代码随想录算法训练营第四七天 | 打家劫舍
LeetCode 198.打家劫舍 LeetCode 213.打家劫舍IILeetCode 337.打家劫舍III你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋原创 2024-03-01 15:30:48 · 803 阅读 · 0 评论 -
代码随想录算法训练营第四六天 | 单词拆分、多重背包、总结
01背包二维dp数组01背包先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历。一维dp数组01背包只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历。完全背包纯完全背包的一维dp数组实现,先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历。如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。如果求最小数,那么两层for循环的先后顺序就无所谓了。原创 2024-03-01 14:20:06 · 436 阅读 · 0 评论 -
代码随想录算法训练营第四五天 | dp[j] = min(dp[j], dp[j - coins[i]] + 1)
还不太会写 完全背包的 二维方法。原创 2024-03-01 11:10:30 · 444 阅读 · 0 评论 -
代码随想录算法训练营第四四天 | 完全背包、求组合、排列总数
卡码网LeetCodeLeetCode。原创 2024-03-01 09:45:13 · 933 阅读 · 0 评论 -
代码随想录算法训练营第四三天 | 最后一块石头的重量 II、目标和、一和零
/ dp[j] 容量为j 的背包,最多可以背最大重量为dp[j]。// 求 sum/2 = target 的背包最多能装多少,就可以求 sum - dp[target] 最少能装多少// 就可以求 最小的可能重量 (sum - dp[target]) - dp[target]sum += i;原创 2024-02-26 21:27:25 · 372 阅读 · 0 评论 -
代码随想录算法训练营第四一天 | 背包问题
LeetCode。原创 2024-02-24 17:58:41 · 916 阅读 · 0 评论 -
代码随想录算法训练营第四十天 | 整数拆分、不同的二叉搜索树
LeetCode 343. 整数拆分LeetCode 96.不同的二叉搜索树拆分一个数 n 使之乘积最大,那么一定是拆分成 m 个近似相同的子数相乘才是最大的。例如 6 拆成 3 * 3, 10 拆成 3 * 3 * 4。m 一定大于等于 2 , 最差也应该是拆成两个相同的 才可能是最大值。j 遍历 只需要遍历到 n / 2 即可,后面没有必要遍历,一定不是最大值。不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?举几个例子:n = 1 有一棵树,n为2有两棵树。原创 2024-02-23 17:58:11 · 615 阅读 · 0 评论 -
代码随想录算法训练营第三九天 | 不同路径
LeetCode 62.不同路径LeetCode 63.不同路径II深搜:每次只能向下或者向右移动一步,那么机器人走过的路径可以抽象为一棵二叉树,叶子节点就是终点。此时问题就可以转化为求二叉树叶子节点的个数:此时树的深度是 m + n - 1,二叉树的节点个数是 2(m+n−1)−12^(m + n - 1) - 12(m+n−1)−1。 指数级别的复杂度。动态规划: 五部曲: dp数组表示从(0, 0) 出发,到(i, j )有dp[i][[j]条不同的路径。时间复杂度:O(m × n)空间复杂度:原创 2024-02-22 17:22:54 · 1126 阅读 · 0 评论 -
代码随想录算法训练营第三八天 | 动态规划
LeetCode 509. 斐波那契数LeetCode 70. 爬楼梯LeetCode 746. 使用最小花费爬楼梯Dynamic Programming (DP) 如果某一问题有很多重叠子问题,使用动态规划是最有效的。动态规划中每一个状态一定是由上一个状态推导出来的,区分于贪心,贪心是从局部直接选最优的。找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己思路推导的!写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。也可以只维护两个元素的数组原创 2024-02-21 10:44:16 · 663 阅读 · 0 评论 -
代码随想录算法训练营第三七天 | 单调递增的数字、监控二叉树
LeetCode 738.单调递增的数字LeetCode 968.监控二叉树当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。思路:监控二叉树给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。思路: 题目示例中的摄像头都没有放在叶子节点上!原创 2024-02-20 11:14:30 · 777 阅读 · 0 评论 -
代码随想录算法训练营第三六天 | 无重叠区间、划分字母区间、合并区间
LeetCode 435. 无重叠区间LeetCode 763.划分字母区间LeetCode 56. 合并区间给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。和用最少数量的箭引爆气球很像,唯一的区别是引爆气球记录的是非重叠数量, 本题记录的是重叠数量。 在 if else 内操作会有所不同。另外,本题对左区间和右区间均可排序,可以计算非重叠数量,用总数量减去非重叠得到重叠数量,也可以按下面代原创 2024-02-19 22:12:51 · 492 阅读 · 0 评论 -
代码随想录算法训练营第三四天 | 柠檬水找零、身高重建队列、最少数量的箭引爆气球
LeetCode 860. 柠檬水找零LeetCode 406. 根据身高重建队列LeetCode 452. 用最少数量的箭引爆气球在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你原创 2024-02-17 16:12:05 · 901 阅读 · 0 评论 -
代码随想录算法训练营第三三天 | K次取反后最大化数组和、加油站、分发糖果
LeetCode 1005. K次取反后最大化的数组和LeetCode 134. 加油站LeetCode 135. 分发糖果局部最优:让绝对值大的负数变为正数,当前数值达到最大。整体最优:整个数组和达到最大。局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大。全局最优:整个 数组和 达到最大。为了尽可能的减少排序次数,代码如下:排序涉及到java的流式操作,需要转换成数值流 -> 包装类 -> 排序 -> 基本类型数值流 -> 数组。加油站rest[i] = gas[i] - co原创 2024-02-16 16:38:11 · 438 阅读 · 0 评论 -
代码随想录算法训练营第三二天 | 买卖股票、跳跃游戏
LeetCode 122.买卖股票的最佳时机IILeetCode 55. 跳跃游戏LeetCode 45.跳跃游戏II只有一只股票!当前只有买股票或者卖股票的操作。最终利润是可以分解的:把利润分解为每天为单位的维度。根据 prices 可以得到每天的利润序列:(prices[i] - prices[i - 1])…(prices[1] - prices[0])。其实我们需要收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间。那么只收集正利润就是贪心所原创 2024-02-15 15:32:41 · 1175 阅读 · 0 评论 -
代码随想录算法训练营第三一天 | 贪心算法
LeetCode 455.分发饼干LeetCode 376. 摆动序列LeetCode 53. 最大子序和贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心算法没有固定的套路。唯一的难点是如何通过局部最优,推出整体最优。如何验证可不可以用贪心算法:举反例,如果想不到反例,那么就试一试贪心吧。贪心算法一般分为如下四步:做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。摆动序列如果原创 2024-02-15 09:32:05 · 953 阅读 · 0 评论 -
代码随想录算法训练营第三十天 | 重新安排行程、N皇后、解数独
回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等void backtracking(参数) {if (终止条件) {存放结果;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表);原创 2024-02-14 09:46:51 · 1008 阅读 · 0 评论 -
代码随想录算法训练营第二九天 | 递增子序列、排列
LeetCode 491.递增子序列LeetCode 46.全排列LeetCode 47.全排列 II不能使用之前的去重逻辑!同一父节点下的同层上使用过的元素就不能再使用了题目要求递增子序列大小至少为2,终止条件要限定。全排列每层都是从0开始搜索而不是startIndex需要used数组记录path里都放了哪些元素了全排列 II给定一个可包含重复数字的序列,要返回所有不重复的全排列去重一定要对元素进行排序,这样我们才方便通过相邻的节点来判断是否重复使用了。对同一树层,前一位(也就是nums[i原创 2024-02-12 09:55:57 · 397 阅读 · 0 评论 -
代码随想录算法训练营第二八天 | 分割 子集
LeetCode 93.复原IP地址LeetCode 78.子集LeetCode 90.子集II一些字符串的基本操作不会s.insert(i + 1, ‘.’);s.deleteCharAt(i + 1);子集组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!遍历这个树的时候,把所有节点都记录下来,就是要求的子集集合。求取子集问题,不需要任何剪枝!因为子集就是要遍历整棵树。result.add(new ArrayList<>(path)); // 放在终止条件的外面子集 II原创 2024-02-06 21:08:56 · 644 阅读 · 0 评论 -
代码随想录算法训练营第二七天 | 回溯 组合 分割
LeetCode 39. 组合总和LeetCode 40.组合总和IILeetCode 131.分割回文串给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于原创 2024-02-05 15:48:42 · 440 阅读 · 0 评论 -
代码随想录算法训练营第二五天 | 回溯 组合
LeetCode 216.组合总和IIILeetCode 17.电话号码的字母组合找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。原创 2024-02-05 10:58:42 · 520 阅读 · 0 评论 -
代码随想录算法训练营第二四天 | 回溯 组合
LeetCode。原创 2024-02-05 10:01:45 · 310 阅读 · 0 评论 -
代码随想录算法训练营第二三天 | 修剪二叉搜索树、将有序数组转换为二叉搜索树、把二叉搜索树转换为累加树
LeetCode 669. 修剪二叉搜索树LeetCode 108. 将有序数组转换为二叉搜索树LeetCode 538.把二叉搜索树转换为累加树修剪二叉搜索树,使得所有节点的值在[low, high]中。注意: 当遇到不在这个区间的内的节点不能直接置 null , 因为可能遇到其左右节点是在这个区间内的。在上图中我们发现节点0并不符合区间要求,那么将节点0的右孩子 节点2 直接赋给 节点3的左孩子就可以了(就是把节点0从二叉树中移除),如图:迭代法因为二叉搜索树的有序性,不需要使用栈模拟递归的过程。原创 2024-02-01 16:55:44 · 444 阅读 · 1 评论