自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 收藏
  • 关注

原创 LeetCode 31. 下一个排列

2.若 nums[ i ] > nums[ i -1 ],则对 i 至 len 的 nums 数组进行升序排列,取排好序的数组中最小的但是大于 nums[ i - 1] 的数字与 nums[ i - 1 ] 进行交换。比如:123465 ,检测到 nums[ i ] 为6 > nums[ i-1 ]为4之后,对 65进行排序得到 56,且 5 大于 4,则交换 5 和 4 的位置,123465 的下一个排列为 123546。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的。

2024-06-18 17:15:40 659

原创 Leetcode 84. 柱状图中最大的矩形

二、当当前柱子 i 的高度等于栈顶元素所对应的柱子的高度时,可以将当前柱子的下标 i 直接入栈,也可以先将当前栈顶元素弹出,再入栈,两者的区别在于前者在第三种情况计算时会多计算一次(会多进行一次面积计算结果为0的计算),但最后的结果 res 不变(因为 res 是所有面积中的最大值)。大体思路:对于每一个柱子,我们需要找到这根柱子左边 向左第一根柱子高度小于当前柱子高度的柱子的下标,和右边向右第一根柱子高度小于当前柱子高度的柱子下标,如下图,然后计算由当前柱子为基础所能形成的柱子的最大面积。

2024-05-30 19:38:49 391 1

原创 LeetCode 79.单词搜索

对于 word 字符串,每匹配到一个字符 word.charAt(p) 后(假设在 board[ i ][ j ] 处匹配到),就递归匹配下一个字符 word.charAt(p+1)(在 board[ i ][ j + 1]、board[ i ][ j - 1]、board[ i +1 ][ j ]、board[ i +1 ][ j ] 处去尝试匹配),如此类推。同时注意到对已经匹配的字符需要加一个标识,避免其被再次匹配到(可以给已经匹配的字符加一个 - 号,让其不能再和word 中的字符匹配到)。

2024-05-23 17:14:08 487

原创 LeetCode 22.括号生成

本题可以采用 回溯的方法解决。将剩余可放置的 左括号 '(' 数量 left 和 右括号 ')' 数量 right 作为参数传入 backtrack 函数中。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。

2024-05-23 16:22:11 457

原创 652. 寻找重复的子树

对于第二个问题,可以通过一个 HashMap 来去重。当一个结构出现第二次的时候,将这个结构所在的根节点加入到 结果集中,这个结构出现更多次的时候不能重复添加。对于第一个问题,可以通过序列化表示出当前子树的结构。对于每一个节点,利用一个序列化字符串标识其结构,可以通过 前序、中序、后序或者层序遍历,本文采用后序遍历。本题需要找到重复的子树,那么需要解决两个问题。一、如何知道 以当前节点为根节点的子树的结构。二、如何知道以当前节点为根节点的子树 是否重复出现过。对于同一类的重复子树,你只需要返回其中任意。

2024-05-13 16:10:30 353

原创 124. 二叉树中的最大路径和

对于每个节点,以这个节点为根节点的路径最大和 为 该节点的节点值 + 左右子节点的最大贡献值。所以只需要遍历整棵二叉树,对于每一个节点:1.计算其最大贡献值 并返回2.计算以该节点为根节点的最大路径和 curSum 并更新全局最大路径和 maxSum。2.节点为叶子节点,则其最大贡献值为叶子节点的节点值。(节点不为叶子节点,最大贡献值为节点值 + 左右子节点中贡献值较大者。被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。1.节点为空,其最大贡献值为0。节点,且不一定经过根节点。

2024-05-12 15:39:53 320 1

原创 LeetCode 238. 除自身以外数组的乘积

本题可采用 取每个元素 nums[ i ]之前所有的元素 的乘积 pre[ i ]和 每个元素之后所有元素的乘积 behind[ i ] 做乘积的方法,得出 res[ i ]。之中任意元素的全部前缀元素和后缀的乘积都在。时间复杂度内完成此题。之外其余各元素的乘积。

2024-05-02 19:50:25 288 1

原创 LeetCode 647. 回文子串

当 s.charAt( i ) == s.charAt( j ) 时,此时 分为三种情况:一: i==j,这时说明 i 和 j 指向的是同一个字符 a,可以算作回文子字符串,因此 dp[ i ][ j ] = true;三:j - i >= 2 ,这时候需要判断 i+1 到 j-1 是否为回文子字符串,即 dp[ i+1 ][ j-1 ] 是否为 true,如果为 true,则说明 i ~ j 也是回文子字符串,即 dp[ i ][ j ] = true。三个回文子串: "a", "b", "c"

2024-04-19 19:10:03 435 1

原创 LeetCode 121. 买卖股票的最佳时机

买入这只股票,因此在购入股票的那一天 的金额 dp[ i ][ 0 ] 肯定为 -prices[ i ] ,而不是 dp[ i -1 ][ 1 ] - prices[ i ],因为 dp[ i -1 ][ 1 ] - prices[ i ] 中的 dp[ i -1 ][ 1 ] 包含了 在 i -1 天之前买入股票又卖掉的情况。用 dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);

2024-04-16 00:07:16 915

原创 LeetCode 337. 打家劫舍 III

动态规划的 dp 数组可以仅是一个 int [ ] 数组,为每一个节点创建一个这样的 dp 数组(通过递归创建)。数组里面只有两个值,dp [ 0 ] 表示偷当前节点所能获得的最高金额,dp [ 1 ] 表示不偷当前节点所能获得的最高金额。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。最后 获取根节点的 状态数组 res,然后返回 res 数组中的最大值即可。小偷又发现了一个新的可行窃的地区。小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7。,小偷能够盗取的最高金额。

2024-04-14 17:29:32 734

原创 LeetCode 213. 打家劫舍 II

但本题需要注意 1 号房子和 len(nums 的长度) 号房子不能同时偷窃。因此可以分两种情况考虑,一是只考虑 从 1 号房子到 len -1 号房子中所能偷窃的最大值 ,二是只考虑从 2 号房子到 len 号房子所能偷窃的最大值。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。,今晚能够偷窃到的最高金额。

2024-04-11 17:39:00 212

原创 LeetCode 198.打家劫舍

一是偷 i 号房,这样就要求 i - 1 号房没被偷,所以 dp[ i ] 可以等于 dp[ i - 2 ] + value[ i ];二是 不偷 i 号房,则 从 1 到 i 号房所能偷的最大价值 dp[ i ] 等于 从 1 到 i - 1 号房所能偷的最大价值 dp[ i - 1 ]。因此 dp[ i ] = Math.max(dp[ i - 2 ] + value[ i ],dp[ i - 1 ])。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。

2024-04-11 17:29:24 406

原创 LeetCode 139. 单词拆分

递推公式:dp[ i ] 为 true,当且仅当 [ j,i ) 的子字符串能由 字典里面的字符串组成且 dp[ j ] 为 true。本题可以视作一个完全背包问题,单词的长度 s 为背包的容量,字典里面的各个字符串为 物品。采用动态规划来解决。dp[ i ] 为 true 则表示长度为 i 的字符串能由字典里面的字符串组成。返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

2024-04-10 19:55:16 369

原创 LeetCode 322. 零钱兑换

如果对于一个容量 j 来说,在遍历完了所有的物品(硬币)后,发现没有物品(硬币)能装进容量为 j 的背包,则 dp[ j ] 此时仍为 Integer.MAX_VALUE,这说明 容量为 j 的背包是没有硬币组合能装满的。在这种情况下,dp[ j ] 不能作为 容量大于 j 的的 dp 值的前置条件,即如果有 一个 容量大于 j 且需要 dp[ j ] 作为前置条件的 dp 值的话,那么这个 dp 值所对应的容量的背包也是不能被装满的,即没有任何一种硬币组合能组成总金额。遍历顺序:本题是求硬币的组合数。

2024-04-09 17:10:13 442

原创 KamaCoder 57. 爬楼梯(第八期模拟笔试)

初始化:dp[ 0 ] = 1,其余 dp 值初始化为 0。本题可以看作一个完全背包问题,n 为要爬的阶梯数(背包的容量),m表示每次爬楼梯时 可以走 1 ~ m 阶,则 问需要爬 n 阶楼梯,每次只能爬 1~m 阶,有多少种方法,等同于用重量为 1~m 的物品 要装满容量为 n 的背包,同一物品可重复添加,有多少种方法。遍历顺序:本题是要求装满背包的排列数,比如走 三阶楼梯,先走一阶再走两阶 或者先走两阶都可以,因此遍历顺序是先遍历背包容量(要走的阶梯数),再遍历物品(每次走的步数)。

2024-04-09 16:14:15 247

原创 LeetCode 518. 零钱兑换 II

如果 容量为 j 的背包装入了 大小为 coins[ i ] 的物品,那么就变成了一个 容量为 j - coins[ i ] 的背包,那么 dp[ j ] 就应该加上 dp[ j - coins[ i ]]。故 dp[ j ] += dp[ j - coins[ i ] ]本题是完全背包问题,即 数字可以无限次装入背包,求背包的最大价值的问题。dp[ j ] :要装满容量为 j 的背包有 dp[ j ] 种方法。初始化:将 dp[ 0 ] 初始化为 1,其余 dp 值初始化为 0。

2024-04-08 16:26:42 456

原创 KamaCoder 52. 携带研究材料(第七期模拟笔试)

容量为 j 的背包的最大价值有两个来源,一是 装进了物品 i,价值为未加入物品 i 前背包的最大价值 + 物品 i 的价值。本题是一个 完全背包问题,给定一个有最大容量的背包和一些物品(有重量和价值),物品可以重复添加进背包里面,求背包的最大价值。初始化:dp[ 0 ] 显然为 0,其余 dp 值也初始化为 0,避免 初始值过大而覆盖 计算出来的值。小明的行李箱所能承担的总重量为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。输出一个整数,表示最大价值。

2024-04-08 15:33:21 246

原创 LeetCode 474. 一和零

dp[ i ][ j ] 有两个来源,一是 物品(字符串)没有放进背包里面,那么 dp[ i ][ j ] 不变。二是 物品(字符串)放入了背包,则dp[ i ][ j ] = dp[ i - x ][ j - y ] + 1 ,背包的里面 0 和 1 的剩下的容量要减少,背包中装的物品的个数 +1。其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"}。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。

2024-04-07 21:11:10 406

原创 LeetCode 494. 目标和

递推公式:dp[ j ] = dp[ j - nums[ i ] ],遍历数字 nums[ i ],将 nums[ i ] 装进背包,看剩下的空间要装满有多少种方法 a,将 a 添加到 dp[ j ]中,然后遍历下一个数字。解释: 当容量为 j 的背包被占用了 nums[ i ] 的空间时,还剩下 容量为 j - nums[ i ] 的空间,而要装满这剩下的 j - nums[ i ] 的空间有 dp[ j - nums[ i ] ] 种方法。遍历顺序是:先遍历物品(即数字),再遍历背包容量。

2024-04-07 16:47:26 700

原创 LeetCode 1049. 最后一块石头的重量 II

关键在于想到将这堆石头划分成两堆总重量相等或最相近的石头,然后再对这两堆石头做差取绝对值就可以得到最后的结果了。石头的重量也是石头的价值。无论 dp[ target ] 最后的值为多少,dp[ target ] 与 sum - dp[ target ] 的差值是将 stones 这堆石头划分成两堆后最小的。组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],

2024-04-06 17:23:24 280

原创 LeetCode 416. 分割等和子集

往背包里面添加元素,每个元素的重量为 nums[ i ],每个元素的价值为 nums[ i ],当容量为 target 的背包里面的 最大价值 dp[ target ]为 target 时,说明能将一些元素装进一个背包里面,使得这些元素的 和为 sum 的一半,则说明必然可以将 nums 数组分为两个 和相等的子集。注意要先遍历 物品 i,再遍历背包容量 j,否则会导致 对于每个容量为 j 的背包,里面的最大价值是 物品 i 中 重量小于 j 的那一个物品的价值,即这时背包里面只能装一个元素。

2024-04-06 16:19:23 354

原创 KamaCoder 46. 携带研究材料(第六期模拟笔试)

初始化:当容量 j = 0 时 dp[ i ][ 0 ] 肯定为 0;当 i = 0,即只将 0 号物品装入 背包时,如果背包的容量 j < weight [ 0 ],则此时装不进背包,背包中的价值为 0,当 背包的容量 j >= weight[ 0] 时,这时可以将 0 号物品装入背包,背包的价值为 value[ 0 ]。故 dp[ i ][ j ] = Math.max(dp [ i -1 ][ j ] ,dp[ i-1 ][ j - weight [ i ] ] + value[ i ]);

2024-04-04 17:31:26 398

原创 LeetCode 96. 不同的二叉搜索树

确定递推公式:dp[ i ] += dp [ j -1 ] * dp[ i - j ],其中 j 是当前作为根节点的节点,取值范围是 [ 1, i ],当 节点 j 作为根节点时,其 左子树的节点个数为 j -1,所以左子树形成的二叉搜索树的种数为 dp[ j - 1 ],其右子树的节点个数为 i - j,所以右子树形成的二叉搜索树的种数为 dp [ i - j ],故节点 j 作为根节点时形成的二叉搜索树的种数为 dp[ j - 1] * dp[ i - j ]。返回满足题意的二叉搜索树的种数。

2024-04-03 17:43:58 278

原创 LeetCode 343. 整数拆分

确定递推公式:dp[ i ] 有两个来源,一是 j * (i - j),二是 j * dp[ i- j ],前者表示将 整数 i 拆成两个正整数进行乘积,后者表示将整数 i 拆成两个或两个以上的正整数进行乘积。此时 i *( i - j) = 6,而 dp[ i - j ] = dp[ 3 ] = 2,故 j * dp[ i - j ] = 4。故 j * (i - j)和 j * dp[ i- j ] 是两个不同的来源。由于 dp[ i ] 的值依赖于 dp[ i - j ],故应该从前往后进行遍历。

2024-04-03 16:44:51 231

原创 LeetCode 63. 不同路径 II

dp[ i ][ j ] 表示从 (0,0) 到(i,j)的路径数。只是当 遇到 (i,j)处有障碍时,将 dp[ i ][ j ] 设置为 0。此外还有两个细节是,如果障碍就在起点或终点,那必然是不能到达终点的,可以直接返回 0;如果障碍在第一行或第一列, 则障碍的右边或者下边都是不可达的,所以其 dp 值应该设为 0。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。网格的左上角 (起始点在下图中标记为 “Start” )。网格中的障碍物和空位置分别用。

2024-04-03 15:45:47 404

原创 LeetCode 62. 不同路径

dp[ i ][ j ] 表示从 [0,0] 到 [i,j] 的路径数。其次确定递推公式,由于机器人每次只能向下或向右走,故走到 【i,j】的两个来源是 【i,j】 的左边 【i,j-1】和 【i,j】的上边【i-1,j】,故 dp[ i ][ j ] = dp[ i ][ j-1 ] + dp[ i-1 ][ j ]。初始化时将第一行和第一列的 dp 都初始化为1,因为第一行的只能通过向右到达,第一列只能通过向下到达。遍历时从第二行开始从左往右遍历,保证 dp[ i ][ j ] 的上边和左边不为空。

2024-04-03 15:10:24 378

原创 LeetCode 746. 使用最小花费爬楼梯

由于 cost[i] 是从第 i 个阶梯往上跳所需要花费的代价,而我们可以选择从第 0 个或者第 1 个阶梯开始起跳,所以 dp[0] = 0,dp[1] = 0。确定递推公式:dp[i] 有两个来源,一是 dp[i-1] + cost[i-1],二是 dp[i-2] + cost[i-2],我们需要选择两者中最小的那一个。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。

2024-04-02 17:27:58 423

原创 LeetCode 70. 爬楼梯

得到递推公式,因为每次爬楼梯只允许移动1阶或者2阶,所以dp[i] 有且仅有两个来源: 从第 i-1 阶移到 第 i 阶只能走1阶,而移动到第 i-1 阶共有 dp[i-1] 种方法,故移动到第 i 阶至少有 dp[i-1] 种方法;从第 i-2 阶直接移到第 i 阶(不能走1阶,否则会移到第 i-1 阶,变成前一种情况)只能走2阶,而移动到 第 i-2 阶共有 dp[i-2] 种方法,故移动到 第 i 阶又有 dp[i-2] 种方法。故 dp[i] = dp[i-2] + dp[i-1]。

2024-04-02 16:37:36 163

原创 LeetCode 509. 斐波那契数

本题可以采用动态规划来解决。题目中已经给出了递推公式和初始值。用一个 dp 数组来存储结果和中间值,dp[i] 表示 第 i 个数的斐波那契值。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。表示)形成的序列称为。

2024-04-02 15:50:54 296

原创 LeetCode 968. 监控二叉树

对于每个节点 ,若其左右子节点的状态值都为 2,则说明其左右子节点都被覆盖到了,当前节点不需要再放置摄像头,将其状态设置为 0;对于每个节点,若其左右子节点中有任意一个节点的状态值为 0,则说明需要在当前节点处放置一个摄像头,保证其左右子节点中没有被覆盖到的那个节点能被覆盖到;对于每个节点,若其左右子节点中有任意一个节点的状态值为 1,则当前节点能被子节点的摄像头覆盖到,将当前节点的状态值设为 2。叶子节点的数目最多,所以不在叶子节点处放摄像头,在叶子节点的父节点放摄像头会更好。

2024-04-02 15:21:19 324

原创 LeetCode 738. 单调递增的数字

采用贪心的思路,将数字转化为一个字符数组 chars,从后往前进行判断,如果 第 i 个数字小于第 i-1 个数字,则 让第 i 个数字变为9,第 i-1 个数字减一。设置 start 为需要变为9 的字符的最小的下标,从 start 到 chars.length -1 的字符都需要变为 9。当且仅当每个相邻位数上的数字。的最大数字,且数字呈。时,我们称这个整数是。

2024-04-01 23:46:57 355

原创 LeetCode 56. 合并区间

设置排序后 第0个区间的 左边界为 start,第0个区间的右边界为 end。从左向右比较(从 i =1 开始),如果当前区间的左边界小于或等于 end,则说明当前区间和 end 所代表的区间重合,此时应该更新 end 为已重合的区间的最大右边界值。若当前区间的 左边界大于 end,则说明当前区间和 前面已重合的区间并不重合,此时应该将之前已经重合的区间 [ start,end ] 添加进 结果列表 list 中,然后更新 start 为当前区间的左边界,更新 end 为当前区间的右边界,然后继续判断。

2024-04-01 20:34:25 355

原创 LeetCode 763. 划分字母区间

然后遍历 s,当 i 等于当前出现的最大的下标值 idx 时,说明( last, idx ] 之间的字符串可以作为一个字符片段,因为在 ( last, idx ] 之间的字符不可能在 idx 后的位置出现了。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。划分结果为 "ababcbaca"、"defegde"、"hijhklij"。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

2024-04-01 19:35:08 165

原创 LeetCode 435. 无重叠区间

在统计无重叠的区间的数量 count 时,可以先对 intervals 数组按照 start 进行升序排序,然后比较当前区间的 end 和前一个区间的 start,如果当前区间的 end < 前一个区间的 start,则说明这两个区间是重合的,则更新 这两个已重合区间 的最小的右边界值,如果下一个区间的 start < 这个最小的右边界值,则说明这三个区间都重合,否则说明这个区间与前两个区间不重合,无重叠的区间的数量 count 加1,以此类推。需要移除区间的最小数量,使剩余区间互不重叠。

2024-03-30 23:39:33 218

原创 LeetCode 452. 用最少数量的箭引爆气球

需要注意的是,如果当前气球和前一个气球有重合,则需要更新 已重合的气球中的最小右边界,下一次比较时,就用下一个气球的 xstart 与 已重合的气球中的最小右边界 xend 进行比较,如果有重合,则继续更新 已重合气球中的最小右边界;将气球按照 xstart 升序排列,然后比较当前气球的 xstart 和前一个气球的 xend 是否有重合,如果有的话,则说明这两个气球可以用一支箭引爆,如果没有重合的话,则箭的数量加一支,来引爆当前气球。- 在x = 2处发射箭,击破气球[1,2]和[2,3]。

2024-03-29 20:49:44 365

原创 LeetCode 406. 根据身高重建队列

编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。

2024-03-28 23:45:26 386

原创 LeetCode 860. 柠檬水找零

如果是 5 元,则不需要找补,5 元的数量++,如果是10元,则找补 5 元,5 元的数量--,10 元的数量++。如果是 20 元,且 10 元的数量大于 0,则优先找补 10 元的,因为 10 元的仅可用于找补 20 元的, 5 元的不仅可以用来找补 10 元的,还可以用来找补 20 元的。若 10 元的数量小于 0,则找补 3 张 5 元的。对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。

2024-03-27 16:40:32 392

原创 LeetCode 135. 分发糖果

再从右往左比,如果左边的孩子的评分高于右边的孩子的评分,则 左边的孩子所分得的糖果数为 当前糖果数(用于保底,如果 右边的孩子的糖果数+1< 当前糖果数,则当前糖果数不变,这时可以满足之前从左往右比确定的条件,又可以满足大于右边孩子糖果数的条件)右边的孩子的糖果数+1(保证左边的孩子的糖果大于右边的孩子) 两者之间的最大值(此时既满足从左往右确定的条件,又满足从右往左确定的条件)。这样会让比左边的孩子评分高的孩子得到更多的糖果。你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。

2024-03-27 15:44:51 362

原创 LeetCode 134. 加油站

其次如果在第 i 个加油站的油只有 gas[i] 升,汽车开到第 i 个加油站时自身剩余油量有 curSum 升,而从第 i 个加油站到第 i +1 个加油站需要油量 cost[i] 升,如果 gas[i] + curSum < cost[i] (即 gas[i] - cost[i] +curSum < 0),则说明汽车从 第 i 个加油站及 以前的加油站出发都是行不通的,因为必然会阻塞在 从第 i 个加油站 到 第 i +1 个加油站的路途中。从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。

2024-03-27 14:51:25 395

原创 LeetCode 45. 跳跃游戏 II

用 end 表示当前下标所能跳的边界。用 maxPosition 表示在边界范围内下标所能达到的最大的下标值。每次遍历到边界 end 时更新一下 end,并让 steps ++。跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。每次跳动时,选择跳到由当前下标所能跳的范围内,使能跳的范围最广的那一个下标上。向前跳转的最大长度。生成的测试用例可以到达。处,你可以跳转到任意。

2024-03-25 20:55:27 355

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除