leetcode
文章平均质量分 51
豆包版:每天进步一点点
2LC
展开
-
LC66-二叉树的最小深度(树)--java版
递归遍历左右子树,分四种情况:没有根节点、没有左子树、没有右子树、同时具有只有子树。然后root.left是返回当前根结点的左节点。minDepth 函数将返回从根节点到最近叶子节点的最短路径上的节点数量。//如果根节点只有右子树,则返回非空子树的最小深度+1。//如果根结点为空,直接返回0。原创 2024-10-23 11:22:56 · 249 阅读 · 0 评论 -
LC65---2164.对奇偶下标分别排序(排序)--Java版
(2)对奇数下标的元素按非递增顺序排序,对偶数下标的元素按非递减顺序排序。(1)分别提取奇数下标和偶数下标的元素。(3)最后将排列好的数字进行合并。原创 2024-08-04 16:48:54 · 174 阅读 · 0 评论 -
LC61----1374. 生成每种字符都是奇数个的字符串(字符串)---java版
(4)感觉题目不是很规范哈,比如输入a=7,直接返回aaaaaaa就可以了,不知道holasss有什么意义?有没有大佬网友解释一下。(3)返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。(1)题目要生成每种字符是奇数个的字符串。(2)所以直接用参数n%2来判断。原创 2024-07-25 23:03:28 · 177 阅读 · 0 评论 -
Lc60---1189. “气球” 的最大数量(排序)---Java版
5)举例来说,如果count中字符’l’出现了10次,而required中字符’l’需要2次来构成一个"balloon",那么count.get(‘l’) / required.get(‘l’)的结果是5。这样做的目的是确保minBalloons始终是所有字符中能够拼凑出"balloon"的最小数量。使用required.keySet()的目的是遍历这个集合中的每个键,以便在后续的代码中检查和计算这些字符在另一个Map(比如count)中出现的次数,进而确定能否拼凑出完整的单词"balloon"。原创 2024-07-24 23:03:58 · 260 阅读 · 0 评论 -
L59---101.对称二叉树(广搜)---Java版
3)如果两个节点的值相等,递归检查 p 的左子树和 q 的右子树,以及 p 的右子树和 q 的左子树是否镜像对称。(2)递归检查: isMirror 方法递归检查两个子树是否是镜像对称的。2)如果只有一个节点为空,它们不是镜像对称的(return false)。1)如果两个节点都为空,它们是镜像对称的(return true)。(1)根节点为空: 如果根节点为空,树是对称的。原创 2024-06-25 11:32:17 · 318 阅读 · 0 评论 -
L58---100.路径总和(广搜)---Java版
1)比较 p 和 q 的根节点值:p.val == 1,q.val == 1。因为它们相等,代码会执行 return true,忽略对它们子节点的检查。2)然而,树 p 的右子树是节点值为 3,而树 q 的右子树是节点值为 4。3)该代码在根节点值相同的情况下,直接返回 true,导致错误判断树 p 和树 q 是相同的树。(2)p,q节点如果一个为空,一个不为空,则他们不是相同的树。(3)p,q的值不一样,则他们不是相同的树。原创 2024-06-25 10:25:41 · 253 阅读 · 0 评论 -
L57---112.路径总和(广搜)---Java版
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回 true;否则,返回 false。叶子节点 是指没有子节点的节点。原创 2024-06-23 14:07:44 · 204 阅读 · 0 评论 -
L56---226.翻转二叉树(广搜)---Java版
(2)对第二层开始的数字就用reverse.arraylist进行排序,然后再添加到arraylist的集合里面。节点 6, 5 和 4 没有子节点,不需要进一步处理。第三层是2^2 (4,5,6,7)第二层是2^1(2,3)(1)按照每层来划分,第一层是2^0( 1)第n层是2^(n-1)原创 2024-06-23 13:18:57 · 298 阅读 · 0 评论 -
L55--- 257.二叉树的所有路径(深搜)---Java版
比如根节点是root=1,所以返回dfs(1,“1”,1)格式就是先根节点-》左节点->再右节点进行递归遍历##返回递归的形式dfs(根节点,“”,路径列表的路径)(4)如果不是根节点(但是也要满足系欸但不为空)然后把当前节点是叶子节点的加入到路径列表的路径中。(3)首先先考虑根节点,也就是要满足节点不为空。所以我们要把每个节点的整数数值换成字符串数值。(5)如果不是叶子节点,则要继续遍历。(1)因为是求二叉树的所有路径。先把每个节点的数字转换成字符串。(2)然后是带固定格式的。原创 2024-06-21 22:09:53 · 311 阅读 · 0 评论 -
L54--- 404.左叶子之和(深搜)---Java版
递归遍历左子树 ,然后再把左子树的和相加。原创 2024-06-21 21:02:08 · 250 阅读 · 0 评论 -
L53--- 144. 二叉树的后序遍历(深搜)---Java版
从根节点 root 开始,以 0 作为初始路径值,调用 dfs 方法来计算路径和。更新后的 currentSum = 1 * 10 + 2 = 12。更新后的 currentSum = 1 * 10 + 3 = 13。更新后的 currentSum = 0 * 10 + 1 = 1。递归使用dfs(root,0) 先将root根节点的值设为0。当前 currentSum 为 1(即路径 “1”)。回到根节点,当前 currentSum 仍为 1。左子节点的值为 2。右子节点的值为 3。原创 2024-06-16 12:54:45 · 300 阅读 · 0 评论 -
L52--- 144. 二叉树的后序遍历(深搜)---Java版
将output中的节点依次弹出并存入结果列表result中,这样得到的顺序就是后序遍历(左-右-根)。根节点首先被压入stack中,然后被弹出并压入output中。左子节点先入栈,右子节点后入栈。这样出栈顺序是右-左。stack用于存储需要遍历的节点。output用于反转遍历顺序。(1)二叉树后序遍历:左右根。原创 2024-06-15 20:54:21 · 277 阅读 · 0 评论 -
L51--- 144. 二叉树的前序遍历(深搜)---Java版
然后,它调用一个辅助方法preorderHelper,将根节点root和结果列表result传递给它。调用自身preorderHelper,传入当前节点的左子节点和结果列表result,继续遍历左子树。调用自身preorderHelper,传入当前节点的右子节点和结果列表result,继续遍历右子树。如果当前节点不为空,将当前节点的值node.val添加到结果列表result中。这个方法是前序遍历的主方法,它创建一个空的List来存储遍历结果。返回一个包含二叉树节点值的列表,这些值按照前序遍历的顺序排列。原创 2024-06-15 20:28:38 · 238 阅读 · 0 评论 -
L50--- 104. 二叉树的最大深度(深搜)---Java版
最后,根节点 1 的深度为 Math.max(1, 2) + 1 = 3。所以节点 2 的深度为 Math.max(0, 0) + 1 = 1。所以节点 4 的深度为 Math.max(0, 0) + 1 = 1。所以节点 3 的深度为 Math.max(1, 0) + 1 = 2。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。左子树为空,深度为0。右子树为空,深度为0。左子树为空,深度为0。右子树为空,深度为0。右子树为空,深度为0。原创 2024-06-14 22:49:15 · 194 阅读 · 0 评论 -
L49---2154. 将找到的值乘以 2(排序)---Java版
如果在 nums 中找到 original ,将 original 乘以 2 ,得到新 original(即,令 original = 2 * original)。如果在 nums 中找不到与 original 相等的值,flag 保持为 false,循环结束,返回最终的 original 值。如果在 nums 中找到与 original 相等的值,original 被翻倍,flag 被设置为 true,循环继续。在每次循环中,flag 被设置为 false,然后遍历数组 nums。否则,停止这一过程。原创 2024-06-14 21:07:20 · 222 阅读 · 0 评论 -
L48---1637. 两点之间不包含任何点的最宽垂直区域(排序)---Java版
(4)第一个索引值 i 表示数组 points 中的第 i 个元素,而第二个索引值 0 表示这个元素中的第一个值(也就是 x 坐标)。(3)如果按横坐标比较,(a, b) -> a[0] - b[0] 是一个函数式接口 Comparator 的实现,它定义了一个比较规则,用于比较两个元素的大小。(4)如果按纵坐标进行排序,在这个比较器中,(a, b) -> a[1] - b[1] 表示按照数组元素的第二个值(也就是 y 坐标)进行升序排序。(2)所以,我们先对点坐标的横坐标进行排序。原创 2024-06-09 16:06:01 · 262 阅读 · 0 评论 -
L47---2706. 购买两块巧克力(排序)---Java版
(3)由于价格数组已经排序,如果当前组合的总花费已经超过 money,后续的组合只会更大,所以可以提前退出内层循环,提高效率。(2)双循环遍历所有可能的两块巧克力组合,计算其总花费。如果总花费小于等于 money,则更新最大剩余金额。(1)排序:从最便宜的巧克力开始组合。原创 2024-06-09 15:26:26 · 256 阅读 · 0 评论 -
L45---506.相对名次(java)--排序
另外,Java中的trim()方法是不可变的,这意味着trim()方法会返回一个新的String对象,而不会修改原始字符串。(1)String.join(" ", words) 是 Java 中的一个语法,用于将数组或集合中的元素连接成一个单独的字符串,连接时使用指定的分隔符。(2)a.charAt(index) 是 Java 中 String 类的一个方法,用于返回字符串 a 中指定索引位置的字符。result 变为 "This is a "。result 变为 "This is "。原创 2024-06-07 21:46:12 · 251 阅读 · 0 评论 -
L44---506.相对名次(java)--排序
运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。(3)接着用自定义比较器,对index里的数字,按照分数进行比较,按从高到低排序,得到排序后的索引数组[4,1,2,0,3]从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 “x”)。(2)索引数组起到标记的作用,比如[85,92,88,76,95],原创 2024-06-07 20:41:54 · 327 阅读 · 0 评论 -
Lc42---- 1200. 最小绝对差(java版)---排序
(初始化 minDiff 为最大整数值,然后遍历数组找出相邻元素之间的最小差值。(3)构造元素对(收集具有最小绝对差的所有对:)原创 2024-05-24 10:52:22 · 168 阅读 · 0 评论 -
Lc41---- 561. 数组拆分(java版)---排序
(2)循环中的 i += 2 让变量 i 每次都增加 2,这是因为我们每次需要取相邻的两个数作为一对。(1)这种题型出现很多次了,大概就是[1,2,3,4],要求元素之间两两配对比如(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)接下来,我们遍历排序后的数组,每次取相邻的两个数作为一对,并将每对中较小的数字之和累加起来。我们首先对数组进行排序,从小到大排列,得到 [1, 2, 3, 4, 5, 6]。假设我们有一个数组 nums = [1, 2, 3, 4, 5, 6]。原创 2024-05-23 11:31:11 · 310 阅读 · 0 评论 -
Lc40---- 1636. 按照频率将数组升序排序I(java版)---排序(需要再次code一下)
对于你的情况,因为你要对一个数组 int[] nums 进行自定义排序,最直接的方法是先将数组转换为 List,然后使用 Collections.sort 进行排序,最后再将排序后的 List 转回数组。(1)使用Arrays.sort和Collections.reverseOrder:对于数组,可以使用Arrays.sort方法与Collections.reverseOrder一起使用来实现降序排序。(2)使用Collections.sort和Collections.reverseOrder。原创 2024-05-23 11:09:03 · 362 阅读 · 0 评论 -
Lc39---- 922. 按奇偶排序数组 II(java版)---排序
(1)这道题主要是要满足 nums[i] 为奇数时,i 也是 奇数;对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数;(3)总体思路就是创建一个新的数组,再遍历旧数组,旧数组里面满足元素是奇数的,将计数器+2。解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。(2)也就是说索引i=1,3,5,7位置上的元素应该为奇数,索引i=2,4,5,6位置上的元素应该为偶数。输入:nums = [4,2,5,7]输入:nums = [2,3]输出:[4,5,2,7]原创 2024-05-22 23:09:16 · 176 阅读 · 0 评论 -
Lc37----1385. 两个数组间的距离值(java版)---排序
距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d。输入:arr1 = [1,4,2,3], arr2 = [-4,-3,6,10,20,30], d = 3。输入:arr1 = [2,1,100,3], arr2 = [-5,-2,10,-3,7], d = 6。输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2。所以 arr1[1]=5 也符合距离要求。原创 2024-05-21 17:34:28 · 304 阅读 · 0 评论 -
Lc36--- 350. 两个数组的交集 II(java版,正确版)---(排序)
在增强型的 for 循环中**,entry : map.entrySet() 的语法表示依次迭代 map.entrySet() 返回的集合中的每个元素**,其中 entry 是当前迭代的元素,它代表了一个键值对。可以不考虑输出结果的顺序。在这个特定的情境中,num 是 map1 中的键,它代表了数组 nums1 中的一个元素。所以 map1.get(num) 返回的是键 num 对应的值,即元素在 nums1 数组中出现的次数。输入:nums1 = [1,2,2,1], nums2 = [2,2]原创 2024-05-21 13:05:44 · 344 阅读 · 0 评论 -
Lc36--- 350. 两个数组的交集 II(java版)---(排序)
map.put(num, map.getOrDefault(num, 0) + 1) 将更新后的计数值放回 map 中,键为 num,值为其新的计数值。(2)首先创两个集合求交集,再创建一个新集合用来存储交集结果。最终结果 map 为 {1=2, 2=2},表示 1 出现了 2 次,2 也出现了 2 次。map.put(2, 1),更新 map 为 {1=1, 2=1}。map.put(2, 2),更新 map 为 {1=1, 2=2}。map.put(1, 2),更新 map 为 {1=2, 2=2}。原创 2024-05-20 23:05:34 · 371 阅读 · 0 评论 -
Lc35--- 349.两个数组的交集(java版)---(排序)
在循环体内部,**通过调用 iterator.next() 方法获取迭代器当前位置的元素,并将其赋值给结果数组 result 中的相应位置,即 result[index]。**然后,将 index 的值增加 1,以便下一次循环时可以将下一个元素存放在结果数组中的下一个位置。的意思是将 num 的值赋给数组 result 的第 index 个位置,然后将 index 的值增加 1。的一个方法,用于获取迭代器当前位置的下一个元素,并将迭代器的位置向后移动一个位置。(3)创建一个新的数组,放置交集元素。原创 2024-05-16 16:56:51 · 323 阅读 · 0 评论 -
leetcode30---217.重复元素(排序)---Java版
给你一个整数数组 nums。如果任一值在数组中出现 至少两次 ,返回 true;如果数组中每个元素互不相同,返回 false。输入:nums = [1,1,1,3,3,4,3,2,4,2]输入:nums = [1,2,3,1]输入:nums = [1,2,3,4]217. 存在重复元素。原创 2024-05-09 21:27:04 · 242 阅读 · 0 评论 -
力扣Lc29---- 541. 反转字符串 II(java版)-2024年4月06日
最终,字符数组变为 [“b”, “a”, “c”, “d”, “f”, “e”, “g”],转换为字符串后为 “bacdfeg”。反转 chars[0] 和 chars[1],得到 [“b”, “a”, “c”, “d”, “e”, “f”, “g”]反转 chars[4] 和 chars[5],得到 [“b”, “a”, “c”, “d”, “f”, “e”, “g”]初始化 s = “abcdefg” 和 k = 2。1)第一次循环(i = 0)2)第二次循环(i = 4)原创 2024-04-06 22:52:01 · 330 阅读 · 0 评论 -
力扣Lc28---- 557. 反转字符串中的单词 III(java版)-2024年4月06日
在你的代码中,words.length() 返回的是数组的长度,而数组的索引从 0 开始。因此,words.length() - 1 会是最后一个单词的索引,但是在循环中你应该使用 words.length 来遍历整个数组。对于数组的索引,通常我们使用数组的长度 array.length,而不是 array.length() - 1。2)在Java中使用StringBuilder的toString()方法时,它会返回StringBuilder对象当前包含的所有字符序列的字符串表示。原创 2024-04-06 21:28:44 · 679 阅读 · 0 评论 -
力扣Lc27--队列-- 387. 字符串中的第一个唯一字符(java版)-2024年4月02日
getOrDefault 方法允许我们安全地从 HashMap 中获取值,即使指定的键不存在,也不会抛出 NullPointerException,而是返回一个默认值。map.getOrDefault 是一个 HashMap 方法,它用于获取与指定键关联的值,如果这个键不存在,则返回指定的默认值。String类提供了一个repeat方法,该方法用于将指定的字符串重复指定的次数。HashMap中添加一个已经存在的键,新的键的值会覆盖原有键的值。HashMap 中的键必须是唯一的,不能重复。原创 2024-04-02 20:39:05 · 225 阅读 · 0 评论 -
力扣Lc26--- 1108. IP 地址无效化(java版)-2024年4月02日
注2:String类的replace方法用于在字符串中替换指定的字符或字符序列。它有两种重载形式:replace(char oldChar, char newChar)注1:首先,在Java中,字符类型应该使用单引号’,而不是双引号"。其次,修改字符数组中的元素应该使用单引号。该方法用新字符newChar替换字符串中的所有旧字符oldChar。原创 2024-04-02 17:10:49 · 254 阅读 · 0 评论 -
力扣Lc25--- 821. 字符的最短距离(java版)-2024年3月31日
这一遍历可以帮助我们找到每个位置到其右边最近的目标字符的距离,并将这个距离与之前从左向右遍历得到的距离进行比较,取最小值。这一遍历可以帮助我们找到每个位置到其左边最近的目标字符的距离。原创 2024-03-31 22:55:49 · 212 阅读 · 0 评论 -
力扣Lc24--- 434. 字符串中的单词数(java版)-2024年3月29日
【代码】力扣Lc24--- 434. 字符串中的单词数(java版)-2024年3月29日。原创 2024-03-29 22:07:40 · 282 阅读 · 0 评论 -
力扣Lc23--- 290. 单词规律(java版)-2024年3月27日
2)mapPatternToWord.get(‘a’):获取模式字符 a 对应的单词,这应该是之前映射中存储的值。(4)查当前的模式字符和单词是否已经在映射中,如果不在,则添加映射;(3)遍历 pattern 和 words 同时,为每个模式字符和单词建立双向的映射关系。(2)建立模式字符和单词之间的双向映射关系,我们可以使用两个哈希映射(或字典)来实现。:这是一个逻辑“非”操作符,表示取反。:这是一个逻辑“非”操作符,表示取反。.equals(“dog”):检查获取的单词是否等于 “dog”原创 2024-03-27 22:29:59 · 393 阅读 · 0 评论 -
力扣Lc22--- 459. 重复的子字符串(java版)-2024年3月27日
子串的最大可能长度是s的一半。这是因为如果子串的长度超过了s的一半,那么这个子串就无法重复构成整个字符串s。在这种情况下,子串的最大可能长度是3,因为子串"ababab"(长度为6)显然不能由任何子串重复多次构成。因为如果子串的长度超过了s的一半,那么重复多次的子串加起来的长度就会超过s的长度,从而无法构成整个字符串s。然而,单个字符显然无法重复构成整个字符串,因此我们从长度为2的子串开始考虑。(2)就是先把字符串/2,这是重复子串的最大长度,然后再从总的字串长度去找字串的因数。原创 2024-03-27 20:49:55 · 335 阅读 · 0 评论 -
力扣Lc21--- 389. 找不同(java版)-2024年3月26日
当 i = 0,s.charAt(i) = ‘a’,ASCII值为97。当 i = 1,s.charAt(i) = ‘b’,ASCII值为98。当 i = 0,t.charAt(i) = ‘a’,ASCII值为97。当 i = 1,t.charAt(i) = ‘b’,ASCII值为98。当 i = 2,t.charAt(i) = ‘c’,ASCII值为99。所以 count[1] 的值增加1,变为 count[1] = 1。所以 count[1] 的值减少1,变为 count[1] = 0。原创 2024-03-26 22:13:24 · 767 阅读 · 0 评论 -
力扣Lc20--- 202.快乐数(java版)-2024年3月20日
在 GetNext() 方法中,我们首先将 n 的个位数字取出并计算其平方,然后将其相加得到 sum,即 1^2 + 9^2 = 1 + 81 = 82。在 GetNext() 方法中,计算 68 的各位数字的平方和得到 100,并将其赋给 n。在 GetNext() 方法中,计算 100 的各位数字的平方和得到 1,并将其赋给 n。在 GetNext() 方法中,计算 82 的各位数字的平方和得到 68,并将其赋给 n。此时,循环继续执行,但是 n 的值已经等于 1,不满足循环条件,退出循环。原创 2024-03-21 22:29:38 · 405 阅读 · 0 评论 -
力扣Lc19--- 268. 丢失的数字(java版)-2024年3月20日
在这个语法中,元素类型 是指被遍历对象中元素的类型,元素变量 是在每次循环迭代中代表当前元素的变量名,遍历对象 是要迭代的数组或集合。(1)比如数组里面有n个数,然后计算这n个数的总和(用等差求和数列计算),然后减去数组的和,用总和减去数组和即为所得。所以,在 Java 中,加强型 for 循环中的 元素变量 是直接表示数组或集合中的元素值,而不是它们的索引。原创 2024-03-20 22:12:53 · 342 阅读 · 1 评论 -
补充1道:二进制转换成十进制
如果指定的字符是数字 (‘0’ 到 ‘9’ 之间的字符),则返回相应的数值(例如,‘0’ 返回 0,‘1’ 返回 1,以此类推)。2) 但是换成其他字符串的题的话,原本索引i=0,1,2(从左往右) ,如果m=length-1-i,就变成了逆序(从右往左)1)也就是指数对应的数值是(2,1,0),即从左到右的顺序。(1)比如有一个三位数 110,然后i=0的时候,ex=2。i=1,bitValue(底数)=1,ex(指数)=1。i=2,bitValue=0(底数),ex(指数)=0。原创 2024-03-19 21:17:32 · 341 阅读 · 0 评论