怎么做直播室的网站,广东深圳公司,广州分公司注册,做网站排名的公司有哪些题目描述#xff1a;
以数组 intervals 表示若干个区间的集合#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间#xff0c;并返回 一个不重叠的区间数组#xff0c;该数组需恰好覆盖输入中的所有区间 。
题目解答#xff1a;
class S…题目描述
以数组 intervals 表示若干个区间的集合其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间并返回 一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间 。
题目解答
class Solution {public int[][] merge(int[][] intervals) {Listint[] res new ArrayList();int len intervals.length;if (len 0)return res.toArray(new int[0][]);Arrays.sort(intervals, (a, b) - a[0] - b[0]);for (int i 0; i len; i) {int left intervals[i][0];int right intervals[i][1];while (i len - 1 intervals[i 1][0] right) {i;right Math.max(right, intervals[i][1]);}res.add(new int[] { left, right });}return res.toArray(new int[0][]);}
}题目思路
首先对输入的区间数组按照起始位置进行升序排序。 遍历排序后的区间数组使用两个指针 left 和 right 来表示当前合并的区间。 在遍历过程中如果当前区间的起始位置小于等于 right说明存在重叠更新 right 为当前区间的结束位置。 如果不存在重叠则将当前合并的区间 [left, right] 添加到结果列表中并更新 left 和 right 为当前区间的起始和结束位置。 最后将结果列表转换为数组并返回。
Arrays.sort(intervals, (a, b) - a[0] - b[0]); 这一行代码使用了 Arrays 类的 sort 方法对二维数组 intervals 进行排序。排序的依据是每个子数组的第一个元素即区间的起始位置。
intervals: 要排序的数组。(a, b) - a[0] - b[0]: 这是一个 Lambda 表达式它定义了一个比较器Comparator。该比较器用于确定数组中两个元素的相对顺序。具体来说它按照每个子数组的第一个元素进行升序排序。Lambda 表达式 (a, b) - a[0] - b[0] 返回的是一个负数、零或正数表示 a 小于、等于或大于 b。
res.toArray(new int[0][]) 这一行代码将 Listint[] 类型的 res 转换为 int[][] 类型的数组。 res.toArray(): 这是 List 接口的一个方法用于将列表转换为数组。在这里res 是一个 Listint[] 类型的列表表示存储合并后的区间。调用 toArray() 方法会返回一个 Object[] 类型的数组。 (new int[0][]): 这一部分是为了指定返回的数组类型。在 Java 中由于泛型擦除的原因toArray() 方法只能返回 Object[] 类型的数组。为了转换为指定类型的数组我们需要提供一个具体类型的数组作为参数。在这里(new int[0][]) 创建了一个空的 int[][] 类型的数组然后通过 (int[0][]) 强制转换为 int[][] 类型。