视觉中国官网,重庆seo主管,深圳勘察设计协会网站,个人简历网页简单模板这道题可以用列表来写#xff0c;首先对所有的数组区间依据第一个数字进行排序#xff0c;然后创建一个数组列表存放合并重叠后的结果。
如果列表为空#xff0c;或者当前区间的起始位置大于列表中区间的最后一个位置#xff0c;则不重叠直接插入列表#xff0c;否则合并…
这道题可以用列表来写首先对所有的数组区间依据第一个数字进行排序然后创建一个数组列表存放合并重叠后的结果。
如果列表为空或者当前区间的起始位置大于列表中区间的最后一个位置则不重叠直接插入列表否则合并区间。
这里合并起始位置不变依据区间末尾最大的那个数作为结尾。
最后利用toArray方法把列表转成二维数组输出。
代码如下
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;// 合并区间
public class Solution2 {public int[][] merge(int[][] intervals) {//首先对区间按照起始位置进行排序Arrays.sort(intervals, Comparator.comparing(a-a[0]));Listint[]mergednew ArrayList();//遍历排序后的区间for(int[] interval:intervals){//如果结果列表为空或者当前区间的起始位置大于结果列表中最后一个区间的结束位置//则说明没有重叠直接将当前区间添加到结果列表中if(merged.isEmpty()||merged.get(merged.size()-1)[1]interval[0]){merged.add(interval);}else {//存在重叠需要合并区间merged.get(merged.size()-1)[1]Math.max(merged.get(merged.size()-1)[1],interval[1]);}}//将结果列表转换成二维数组并返回return merged.toArray(new int[merged.size()][]);}
} 1.比较器
Comparator.comparingInt(a - a[0]) 创建了一个比较器该比较器根据整数数组的第一个元素的值来比较两个整数数组。如果第一个数组的第一个元素小于第二个数组的第一个元素则比较器认为第一个数组“小于”第二个数组在排序的上下文中。
2.区间比较
merged.get(merged.size()-1)[1] interval[0]这个条件判断语句的意思是如果merged列表中最后一个区间的结束位置小于当前interval区间的起始位置则条件为真。这种情况表明merged列表中的最后一个区间与interval区间没有重叠因为它们的结束位置和起始位置之间有空隙。