- 博客(51)
- 收藏
- 关注
原创 代码随想录算法训练营第五十九天|单调栈|503.下一个更大元素II、42. 接雨水、84. 柱状图中最大的矩形
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。提示:直接把两个数组拼接在一起。
2024-03-26 17:44:10 272 1
原创 代码随想录算法训练营第五十八天|单调栈|739. 每日温度、496.下一个更大元素 I
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。什么时候用单调栈呢?
2024-03-26 17:32:21 571
原创 代码随想录算法训练营第五十五天|动态规划|583. 两个字符串的删除操作 、72. 编辑距离、 编辑距离总结篇
给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: “sea”, “eat”输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"int。
2024-03-24 22:06:34 412
原创 代码随想录算法训练营第五十三天|动态规划|1143.最长公共子序列、1035.不相交的线、53. 最大子序和
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。
2024-03-24 20:59:03 486
原创 代码随想录算法训练营第五十二天|动态规划|300.最长递增子序列、674. 最长连续递增序列、 718. 最长重复子数组
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4。
2024-03-20 23:22:47 685
原创 代码随想录算法训练营第五十一天|动态规划|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、总结
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]达到买入股票状态(状态一)达到保持卖出股票状态(状态二)
2024-03-20 22:56:24 458
原创 代码随想录算法训练营第四十八天|动态规划|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。
2024-03-16 10:53:37 549
原创 代码随想录算法训练营第四十七天|动态规划|198.打家劫舍、213.打家劫舍II、337.打家劫舍III
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。
2024-03-14 23:02:06 849
原创 代码随想录算法训练营第四十六天|动态规划|139.单词拆分、关于多重背包,你该了解这些! 、背包问题总结篇!
文章讲解完全背包中排序和组合遍历顺序问题没太想明白。
2024-03-14 22:22:55 399
原创 代码随想录算法训练营第四十五天|动态规划|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1
2024-03-14 21:09:16 502
原创 代码随想录算法训练营第四十四天|动态规划|完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
一维只有一个物品时 尽可能多装dp[j]=max( dp[j] (一般=0) , dp[j-weight[0]]+value[0] (要求j>weight[0]) )下一层从前往后遍历:因为腾一件value更高就腾,至于腾一件后里面包含几件都可能,所以要从前往后推。
2024-03-14 20:21:23 347
原创 代码随想录算法训练营第四十三天|动态规划|1049. 最后一块石头的重量 II、494. 目标和、474.一和零
有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x
2024-03-14 17:28:45 974
原创 代码随想录算法训练营第四十一天|动态规划|01背包问题 二维、 01背包问题 一维 滚动数组、416. 分割等和子集
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少那么可以有两个方向推出来dp[i][j],不放物品i:由dp[i - 1][j]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][j]就是dp[i - 1][j]。
2024-03-10 18:29:42 1180
原创 代码随想录算法训练营第四十天|动态规划|343. 整数拆分、96.不同的二叉搜索树
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58有点难,看了题解后还在dp[i]初始化为i,才能保证拆分时jxdp[i-j]里dp[i-j]包含有i-j,但是不对,因为3–1x2=2。
2024-03-08 12:19:51 446
原创 代码随想录算法训练营第三十九天|动态规划|62.不同路径、63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?简单int数论方法没看。
2024-03-07 22:45:32 1017
原创 代码随想录算法训练营第三十八天|动态规划|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
说实话,没做过题连理论基础都看不懂1 确定dp数组(dp table)以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组这道题目我举例推导状态转移公式了么?我打印dp数组的日志了么?打印出来了dp数组和我想的一样么?
2024-03-07 22:21:27 843
原创 代码随想录算法训练营第三十七天|贪心算法|738.单调递增的数字、968.监控二叉树、总结
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x
2024-03-06 23:15:54 341
原创 代码随想录算法训练营第三十六天|贪心算法|435. 无重叠区间、763.划分字母区间、56. 合并区间
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意: 可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
2024-03-06 22:54:40 414
原创 代码随想录算法训练营第三十四天|贪心算法|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
2024-03-02 12:46:28 1275
原创 代码随想录算法训练营第三十三天|贪心算法|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。
2024-03-01 12:07:29 815
原创 代码随想录算法训练营第三十二天|贪心算法|122.买卖股票的最佳时机II、55. 跳跃游戏 、45.跳跃游戏II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。
2024-02-29 18:06:46 981
原创 代码随想录算法训练营第三十一天|贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;输出: 1 解释:你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。所以你应该输出 1。解释:你有两个孩子和三块小饼干,2 个孩子的胃口值分别是 1,2。用了一个 index 来控制饼干数组的遍历,遍历饼干并没有再起一个 for 循环,而是采用自减的方式,这也是常用的技巧。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。
2024-02-29 16:20:17 386
原创 代码随想录算法训练营第三十天|总结、332.重新安排行程、51. N皇后、37. 解数独
文章每一道回溯法的题目都将遍历过程抽象为树形结构方便理解。模板在for循环上做剪枝操作是回溯法剪枝的常见套路“树枝去重”和“树层去重”
2024-02-28 16:40:35 439
原创 代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、47.全排列 II
本题和90有点像,但是有很多坑1 不能先做排序2 判断是否有用过时,由于不是递增序列,所以不是上一个这也是需要注意的点,unordered_set uset;是记录本层元素是否重复使用,新的一层uset都会重新定义(清空),所以要知道uset只负责本层!下层递归,重新定义,所以深度上没有去重。另外,其实用数组来做哈希,效率就高了很多。
2024-02-28 14:48:33 397
原创 代码随想录算法训练营第二十七天|93.复原IP地址、78.子集、90.子集II
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。有解题思路,和分割回文串很像但是没有抽象出代码的能力。流程细节没有梳理清楚。
2024-02-25 12:41:11 279
原创 代码随想录算法训练营第二十六天|39. 组合总和、40.组合总和II、131.分割回文串
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取挺简单的。没有加剪枝,方法是对总集合排序之后,如果下一层的sum(就是本层的 sum + candidates[i])已经大于target,就可以结束本轮for循环的遍历。个人认为没必要。
2024-02-25 11:47:09 492
原创 代码随想录算法训练营第二十五天|216.组合总和III、17.电话号码的字母组合
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。挺简单的。组合稍作修改即可,再加上两处剪枝操作。
2024-02-23 22:30:47 262
原创 代码随想录算法训练营第二十四天|理论基础、77. 组合
给定两个整数 n 和 k,返回 1 …n 中所有可能的 k 个数的组合。第一次做回溯类的题目,回溯相当于把递归的操作复原。子集问题:一个N个数的集合里有多少符合条件的子集。排列问题:N个数按一定规则全排列,有几种排列方式。组合问题:N个数里面按一定规则找出k个数的集合。切割问题:一个字符串按一定规则有几种切割方式。剪枝比较好理解:把树画出来会帮助理解。棋盘问题:N皇后,解数独等等。
2024-02-22 12:02:22 322
原创 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结篇
文章对题目进行分类汇总以及总结。自己复习完在过来看。
2024-02-21 12:14:26 323 1
原创 代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先由于二叉搜索树本身是有序的,所以本题挺简单的。迭代法也很简单,改while。
2024-02-20 20:07:43 562
原创 代码随想录算法训练营第二十天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值暴力:把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了递归法:中序遍历,加一个pre指针指向cur的上一个指针迭代法:中序遍历稍加改进总结:和中双指针基本一个思路。
2024-02-18 17:17:26 276 1
原创 代码随想录算法训练营第十九天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。挺简单的。技巧:画图,更新next就把过去的箭头划掉,这样就可以知道哪个节点会丢失,需要用temp保存。代码优化:传递下标,不用重复构造vector。
2024-02-17 13:42:16 413 1
原创 代码随想录算法训练营第十八天|513.找树左下角的值 、112. 路径总和 113.路径总和ii、106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
在树的最后一行找到最左边的值深度最大的左节点,没有中。更新 深度和左节点终止条件层序遍历即可。
2024-02-16 13:42:19 268 1
原创 代码随想录算法训练营第十七天|110.平衡二叉树、257. 二叉树的所有路径 、404.左叶子之和
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1返回-1表示失衡迭代法。
2024-02-16 01:26:58 309 1
原创 代码随想录算法训练营第十六天|104.二叉树的最大深度 559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
递归法 后序这道题的迭代法就是一道模板题,可以使用二叉树层序遍历的模板来解决的559.n叉树的最大深度2变n。
2024-02-09 16:49:12 140 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人