56. 合并区间
以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
字节面试基础算法题(一次AC)!。首先按照区间的左边进行排序,接下来一次遍历,用一个temp数组维护现在的连续可合并区间。如果正在访问的元素可以合并,就让temp的右极限为max(temp[1],intervals[index][1]),因为有可能出现现在访问的这个被直接包括在里面。如果访问的元素不能被合并,就把现在的temp加入答案数组中,并让temp = intervals[index]。处理到最后一个元素不论何种情况都可以直接把temp加入答案数组的尾部
2196. 根据描述创建二叉树
给你一个二维整数数组 descriptions
,其中 descriptions[i] = [parenti, childi, isLefti]
表示 parenti
是 childi
在 二叉树 中的 父节点,二叉树中各节点的值 互不相同 。此外:
- 如果
isLefti == 1
,那么childi
就是parenti
的左子节点。 - 如果
isLefti == 0
,那么childi
就是parenti
的右子节点。
请你根据 descriptions
的描述来构造二叉树并返回其 根节点 。
测试用例会保证可以构造出 有效 的二叉树。
示例 1
输入:descriptions = [[20,15,1],[20,17,0],[50,20,1],[50,80,0],[80,19,1]]
输出:[50,20,80,15,17,19]
解释:根节点是值为 50 的节点,因为它没有父节点。
结果二叉树如上图所示。
看了题解之后理解,先遍历找到根,思路非常好想。使用哈希表,根据题目描述每个节点的值不同,所以key为每个结点的值,(加粗)value直接存入这个节点,然后开始遍历,判断这个值是不是已经加入,如果没有加入,就加入,再判断孩子节点是否加入,如果没有加入,则加入,这步之后两个结点都存在了,建立连接,判断isleft的值。
这步完成之后只要返回根节点就可以了
2190. 数组中紧跟 key 之后出现最频繁的数字
给你一个下标从 0 开始的整数数组 nums
,同时给你一个整数 key
,它在 nums
出现过。
统计 在 nums
数组中紧跟着 key
后面出现的不同整数 target
的出现次数。换言之,target
的出现次数为满足以下条件的 i
的数目:
0 <= i <= n - 2
nums[i] == key
且nums[i + 1] == target
。
请你返回出现 最多 次数的 target
。测试数据保证出现次数最多的 target
是唯一的。
遍历一次使用哈希表存储每个后继元素出现的次数,再对哈希表求最大值即可
2191. 将杂乱无章的数字排序
给你一个下标从 0 开始的整数数组 mapping
,它表示一个十进制数的映射规则,mapping[i] = j
表示这个规则下将数位 i
映射为数位 j
。
一个整数 映射后的值 为将原数字每一个数位 i
(0 <= i <= 9
)映射为 mapping[i]
。
另外给你一个整数数组 nums
,请你将数组 nums
中每个数按照它们映射后对应数字非递减顺序排序后返回。
注意:
- 如果两个数字映射后对应的数字大小相同,则将它们按照输入中的 相对顺序 排序。
nums
中的元素只有在排序的时候需要按照映射后的值进行比较,返回的值应该是输入的元素本身。
编写函数处理每个数字,然后key=function直接调用排序即可
2186. 使两字符串互为字母异位词的最少步骤数
给你两个字符串 s
和 t
。在一步 *** 作中,你可以给 s
或者 t
追加 任一字符 。
返回使 s
和 t
互为 字母异位词 所需的最少步骤数。
字母异位词 指字母相同但是顺序不同(或者相同)的字符串。
示例 1:
输入:s = "leetcode", t = "coats" 输出:7 解释: - 执行 2 步 *** 作,将 "as" 追加到 s = "leetcode" 中,得到 s = "leetcodeas" 。 - 执行 5 步 *** 作,将 "leede" 追加到 t = "coats" 中,得到 t = "coatsleede" 。 "leetcodeas" 和 "coatsleede" 互为字母异位词。 总共用去 2 + 5 = 7 步。 可以证明,无法用少于 7 步 *** 作使这两个字符串互为字母异位词。
返回各个字母出现次数的差值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)