![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 59
Helene1996
这个作者很懒,什么都没留下…
展开
-
Leetcode 377-组合总和 Ⅳ
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。题解本题为排列问题排列问题和组合问题区别参考零钱兑换问题II//只用求个数不用求具体的组合,用dp(完全背包(排列数))//排列数:容量在外,遍历顺序从低到高 物品在内,遍历顺序从低到高//1.定义:dp[j]:总和为target的排列总数//2.动态转移方程 dp[j]+=dp[j-nums[i]]原创 2022-05-18 15:12:04 · 343 阅读 · 1 评论 -
Leetcode 474-一和零
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。题解1.动态规划法题解可参考liweiwei1419题解可参考代码随想录动态规划:背包问题若用递归,则递归中的取字符串和不取就对应于背包问题中的拿物品和不拿物品1.dp[i][j][k]:取了前i个字符串后最多取得j个0和k个1的最大的子集的个数 dp=new原创 2022-05-11 18:25:30 · 251 阅读 · 0 评论 -
Leetcode 1049-最后一块石头的重量 II
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。题解题解可参考代码随想录//思路:原创 2022-05-10 17:27:29 · 250 阅读 · 0 评论 -
Leetcode 583-两个字符串的删除操作
注意初始化和状态转移方程式class Solution { //1.dp[i][j]:使得word1[0:i-1]和word2[0:j-1]相同的操作 //2.word1[i-1]==word2[j-1] dp[i][j]=dp[i-1][j-1] //word1[i]-1!=word2[j-1] dp[i][j]=Math.min(dp[i-1][j]+1,dp[i-1][j-1]+2,dp[i][j-1])(删word1(word1[i-2]==word2[j-1]),两个都删原创 2022-04-20 22:21:26 · 360 阅读 · 0 评论 -
Leetcode 392-判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?题解题解可参考代码随想录本题与Leetcode52最长回文子串的区别在于如果s[i]!=s[j] dp[i]原创 2022-04-19 22:22:47 · 86 阅读 · 0 评论 -
Leetcode 647-回文子串
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。题解完整题解可参考代码随想录动态规划步骤:1.确定dp[i][j]含义:字符串s[i:j]是否为回文字符串2. 动态转移方程:如果s[i]=s[j],才可能为回文串,继续判断j-i的长度(1)如果 j-i == 0 字符串长度为1,为回文(2)原创 2022-04-19 22:10:42 · 165 阅读 · 0 评论 -
Leetcode 49-字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。题解1.将不同的字符串转换为字符数组并按照字母顺序进行排序2.异位词排序后的结果相同,故可以作为哈希表的key值3.将字母异位词组成的集合作为哈希表的value值class Solution { //将每个词进行排序,然后将排序后的字符串在哈希表中查找,若不存在,则存入hash表作为key,value是List类型,存转载 2022-04-18 22:23:07 · 76 阅读 · 0 评论 -
Leetcode 454-四数相加 II
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0题解看到形如:A+B…+N=0的式子,要转换为(A+…T)=-((T+1)…+N)再计算,这个T的分割点一般是一半,特殊情况下需要自行判断。定T是解题的关键。此外,可以考虑用到哈希表注意本题与Leetcode原创 2022-04-18 22:17:02 · 157 阅读 · 0 评论 -
Leetcode 202-快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。题解涉及到无限循环可以考虑哈希表(若数字之前出现过则使用哈希)或快慢指针(判断是否有环)法一 哈希表题解参考编程文青李狗蛋这道题我是怎么知道可以用哈希解决呢?重点是在“无转载 2022-04-17 22:22:52 · 352 阅读 · 0 评论 -
Leetcode 977-有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。题解题解转载自代码随想录做数组相关的题时,可以考虑双指针(数组有一定顺序)、哈希表(设计数组位置)、单调栈(涉及数组逆序)双指针法数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指针法了,i指向起始位置,j指向终止位置。定义一个新数组result,和A数组一样的大小,让k指向resul转载 2022-04-17 18:30:51 · 83 阅读 · 0 评论 -
Leetcode 27-移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。题解法一 快慢指针(拷贝覆盖)双指针,快指针(i)每轮右移一步,慢指针(ans)代表有效的数字下标,只在nums[i]!=val时右移,并将nums[i]的值赋给nums[ans]题解转载自画手大鹏标签:拷贝覆盖主要思路是遍历数组 nums转载 2022-04-15 22:20:49 · 75 阅读 · 0 评论 -
Leetcode 990-等式方程的可满足性
给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。题解思路引入题解转载自笨猪爆破组如果事物 a 和 b 有共同点,可以把它们划分到同一集合,同一类。规定:把同一个类的 a、b 看作是相连的节点,不相连的节点不是一类。现在转载 2022-04-15 11:39:54 · 135 阅读 · 0 评论 -
Leetcode 38-外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组转载 2022-04-14 22:07:41 · 173 阅读 · 0 评论 -
Leetcode 24-两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题解题目链接思想:递归两两翻转链表1.链表末端特殊处理:考虑head==null或者head.next == null 的情况2.交换以head为首的两个节点3.递归交换后序节点,注意避免空指针异常的情况class Solution { public ListNode swapPairs(ListNode head) { //1.链表末端原创 2022-04-14 21:56:37 · 454 阅读 · 0 评论 -
Leetcode 50-Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。题解题解转载自编程文青李狗蛋本题很容易让人想到x^n= x^ n/2 *x^ n/2这个操作,但是如何从底到上以及终止条件是什么呢?这时候就可以用到分治(一种递归),自底向下的分解问题,求解,并向上合并分治算法由“分”和“治”两部分组成,但是它主要包括 3 个过程:划分(Divide)求解(Conquer)合并(Combine)其中:划分(Divide):将原问题划分为规模较小的子问题,子问题相互独立,与原问题形式转载 2022-04-07 22:30:40 · 157 阅读 · 0 评论 -
Leetcode 41-缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。题解方法:将数组视为哈希表/*思路③、使用座位交换法 根据思路② 可知,缺失的第一个整数是 [1, len + 1] 之间, 那么我们可以遍历数组,然后将对应的数据填充到对应的位置上去,比如 1 就填充到 nums[0] 的位置, 2 就填充到 nums[1] 如果填充过程中, nums[i] < 1 &转载 2022-04-07 09:05:10 · 151 阅读 · 0 评论 -
Leetcode 402-移掉 K 位数字
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。题解(贪心+单调栈)前后数字逆序,并且要删除若干个数字可以考虑单调栈题解转载自Leetcode官方对于两个相同长度的数字序列,最左边不同的数字决定了这两个数字的大小, 例如,对于 A=1axxx,B=1bxxx,如果 a>b 则 A>B。基于此,我们可以知道,若要使得剩下的数字最小,需要保证靠前的数字尽可能小。考虑从左往右增量的构造最后的转载 2022-04-06 11:10:34 · 333 阅读 · 0 评论 -
Leetcode 324-摆动排序 II
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。题解解法1:排序题解转载自hexcat首先,我们可以很容易想到一种简单的解法:将数组进行排序,然后从中间位置进行等分(如果数组长度为奇数,则将中间的元素分到前面),然后将两个数组进行穿插。例如:对于数组[1, 5, 2, 4, 3],我们将其排序,得到[1, 2, 3, 4, 5],然后将其分割转载 2022-04-05 22:00:39 · 138 阅读 · 0 评论 -
Leetcode 189-轮转数组
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?方法:数组翻转题解转载自Leetcode官方该方法基于如下的事实:当我们将数组的元素向右移动 k 次后,尾部 k mod n 个元素会移动至数组头部,其余元素向后移动 k mod n 个位置。该方法为数组的翻转:我们可以先将所有元素翻转,这样尾部的 k mod n 个元素就被移至数组头部,然后我们再翻转 [0,k mod n−1] 区间的元素和 [k mod n,转载 2022-04-01 18:42:43 · 80 阅读 · 0 评论 -
Leetcode 334-递增的三元子序列
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。进阶:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?题解法一 动态规划 O(n^2)+O(n)法二 双向遍历 (O(n)+O(n))题解转载自Leetcode官方如果数组nums 中存转载 2022-04-01 13:55:20 · 148 阅读 · 0 评论 -
Leetcode 162-寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。题解题解转载自画手大鹏标签:二分查找过程:首先要注意题目条件,在题目描述中出现了 nums[-1] = nums[n] = -∞,这就代表着 只要数组中存在一个元素比相邻元素大,那么沿着它一定可以找到一个转载 2022-04-01 10:01:20 · 84 阅读 · 0 评论 -
Leetcode 343-整数拆分
题解转载自Leetcode官方class Solution { public int integerBreak(int n) { int max=0; //dp[i]:整数i可以获得的最大乘积 int[] dp = new int[n+1]; dp[1]=1; for(int i=2;i<=n;i++){ for(int j=1;j<i;j++){ d转载 2022-03-27 21:03:15 · 68 阅读 · 0 评论 -
Leetcode 135-分发糖果
题解参考Krahetsclass Solution { public int candy(int[] ratings) { int[] left = new int[ratings.length]; int[] right = new int[ratings.length]; Arrays.fill(left, 1); Arrays.fill(right, 1); for(int i = 1; i < ratin转载 2022-03-27 19:36:32 · 75 阅读 · 0 评论 -
Leetcode 128-最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。题解题解转载自Leetcode官方方法:哈希表思路和算法我们考虑枚举数组中的每个数 x,考虑以其为起点,不断尝试匹配 x+1,x+2,⋯ 是否存在,假设最长匹配到了 x+y,那么以 x 为起点的最长连续序列即为 x,x+1,x+2,⋯,x+y,其长度为 y+1,我们不断枚举并更新答案即可。对于匹配的过程,暴力的方法是 O(n) 遍历数组去转载 2022-03-26 17:58:26 · 98 阅读 · 0 评论 -
Leetcode 134-加油站
在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。题解题解转载自angela-x法一 贪心法● 如果选择站点i作为起点「恰好」无法走到站点j,那么i和j中间的任意站点k都转载 2022-03-25 21:37:08 · 78 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润 。题解题解转载自liweiwei1419方法:贪心算法(针对这道问题的特殊解法)贪心算法的直觉:由于不限制交易次数,只要今天股价比昨天高,就交易。下面对这个算法进行几点说明:该算法仅可以用于计算,但 计算的过程并不是真正交易的过程,但可以用贪心算法计算题目要转载 2022-03-25 10:19:53 · 69 阅读 · 0 评论 -
Leetcode 127-单词接龙
public class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { // 第 1 步:先将 wordList 放到哈希表里,便于判断某个单词是否在 wordList 里 Set<String> wordSet = new HashSet<>(wordList); if (原创 2022-03-24 21:43:49 · 60 阅读 · 0 评论 -
Leetcode 309-最佳买卖股票时机含冷冻期
给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。题解(dp+状态)题解转载自艾雅法拉当动态规划中前一步的状态和数值会影响后一天的状态和值时,需要使用含状态的dp,并使用if判断前言:不要关注冷冻期!不要关注冷冻期!不要关注冷冻转载 2022-03-24 21:42:24 · 92 阅读 · 0 评论 -
Leetcode 301-删除无效的括号
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。题解题解转载自宫水三叶搜索 + 剪枝由于题目要求我们将所有(最长)合法方案输出,因此不可能有别的优化,只能进行「爆搜」。我们可以使用 DFS 实现回溯搜索。基本思路:我们知道所有的合法方案,必然有左括号的数量与右括号数量相等。首先我们令左括号的得分为 1;右括号的得分为 −1。则会有如下性质:对于一个合法的方案而言,必然有最终得分为 0;搜索过程中转载 2022-03-24 21:34:50 · 153 阅读 · 0 评论 -
Leetcode 455-分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。题解方法:排序 + 贪心为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,且对于每个孩原创 2022-03-24 20:28:18 · 419 阅读 · 0 评论 -
Leetcode 32-最长有效括号
题解参考zhangnanan042class Solution { public int longestValidParentheses(String s) { int maxans = 0; int[] dp = new int[s.length()]; for (int i = 1; i < s.length(); i++) { if (s.charAt(i) == ')') {转载 2022-03-20 22:16:36 · 59 阅读 · 0 评论 -
Leetcode 297-二叉树的序列化与反序列化
思路一:BFS序列化用BFS遍历树,与一般遍历的不同点是不管node的左右子节点是否存在,统统加到队列中在节点出队时,如果节点不存在,在返回值res中加入一个”null“;如果节点存在,则加入节点值的字符串形式反序列化同样使用BFS方法,利用队列新建二叉树首先要将data转换成列表,然后遍历,只要不为null将节点按顺序加入二叉树中;同时还要将节点入队队列为空时遍历完毕,返回根节点public class Codec { // Encodes a tree to a single转载 2022-03-20 19:12:48 · 91 阅读 · 0 评论 -
Leetcode 438-找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。题解题解转载自宫水三叶双指针(滑动窗口)这是一道使用双指针实现滑动窗口的裸题。具体的,我们可以先创建一个大小为 26 的数组 c2 来统计字符串 p 的词频,另外一个同等大小的数组 c1 用来统计「滑动窗口」内的 s 的子串词频。当两个数组所统计词频相等,说明找到了一个异位组,将窗口的左端点加入答案。class S转载 2022-03-19 21:48:21 · 125 阅读 · 0 评论 -
Leetcode 437- 路径总和 III
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。题解树的遍历 + DFS一个朴素的做法是搜索以每个节点为根的(往下的)所有路径,并对路径总和为 targetSum 的路径进行累加统计。使用 dfs1 来搜索所有节点,复杂度为 O(n);在 dfs1 中对于每个当前节点,使用 dfs2 搜索以其为根的所有(往下原创 2022-03-19 18:47:42 · 398 阅读 · 0 评论 -
Leetcode 406-根据身高重建队列
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。题解题解转载自Trump【排序预处理+贪心】套路:一般这转载 2022-03-19 17:56:15 · 109 阅读 · 0 评论 -
Leetcode 494-目标和
题解法一 dfsclass Solution { private int res = 0; public int findTargetSumWays(int[] nums, int target) { if(nums.length==0) return 0; dfs(nums,0,target,0); return res; } private void dfs(int[] nums,int index,int targe原创 2022-03-18 21:28:39 · 236 阅读 · 0 评论 -
Leetcode 42-接雨水
题解题解转载自windliang按列求+动态规划求每一列的水,我们只需要关注当前列,以及左边最高的墙,右边最高的墙就够了。装水的多少,当然根据木桶效应,我们只需要看左边最高的墙和右边最高的墙中较矮的一个就够了。所以,根据较矮的那个墙和当前列的墙的高度可以分为三种情况。1. 较矮的墙的高度大于当前列的墙的高度把正在求的列左边最高的墙和右边最高的墙确定后,然后为了方便理解,我们把无关的墙去掉。这样就很清楚了,现在想象一下,往两边最高的墙之间注水。正在求的列会有多少水?很明显,较矮的一边,也转载 2022-03-18 18:23:48 · 67 阅读 · 0 评论 -
Leetcode 518-零钱兑换 II(背包问题总结)
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。题解本题为无顺序版本的爬楼梯问题 物品循环在外 背包容量循环在内爬楼梯问题 物品循环在内 背包容量循环在外爬楼梯问题与零钱兑换区别参考链接class Solution { public int change(int amount, i原创 2022-03-16 22:08:39 · 235 阅读 · 0 评论 -
Leetcode 538-把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。题解题解题解转载自xiao_ben_zhu思路访问每个节点时,时刻维护变量 sum,保存「比当前节点值大的所有节点值的和」。二叉搜索树的中序遍历,访问的转载 2022-03-15 22:21:04 · 56 阅读 · 0 评论 -
Leetcode 139-单词拆分
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。题解题解转载自吴彦祖这一看就是个最优组合问题,可以使用背包的解题思路1.初始化 dp=[False,⋯,False],长度为 n 为字符串长度。dp[i] 表示 s 的前 i 位是否可以用 wordDict 中的单词表示。2.初始化 dp[0]=True,空字符可以被表示。3.遍历字符串的所有子串,遍历开转载 2022-03-15 21:45:32 · 100 阅读 · 0 评论