营销型网站建设方案演讲ppt,中小企业管理软件,网站仿造,常熟建设银行 招聘网站合并区间题目以数组 intervals 表示若干个区间的集合#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间#xff0c;并返回 一个不重叠的区间数组#xff0c;该数组需恰好覆盖输入中的所有区间 。解析本题思路相对比较容易想先对各个区间按左…合并区间题目以数组 intervals 表示若干个区间的集合其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间并返回 一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间 。解析本题思路相对比较容易想先对各个区间按左边界从小到大进行排序顺序对重叠区间进行聚合第一个作为基准从第二个开始比较区间左边界是否小于等于基准区间的有边界若符合则说明两个区间有重叠可以聚合也就是说两者的右边界哪个大选哪个作为基准区间的右边界。以此类推直到不符合条件则第一个聚合区间形成。并把当前区间作为基准区间再从第一步重新开始执行但是这个题目在编码的时候会遇到几个基础的编码知识比较容易遗忘。对二维数组进行排序我们知道对一维数组int[] a进行排序的话可以使用Arrays.sort(a)完成。但是二维数组呢二维数组可以用该函数的重载函数 sort(T[] a, Comparator? super T c)通过指定要比较哪个字段就可以实现对二维数组的排序了。list中装数组Listint[] list new ArrayList(); 大家见过吗不管见没见过这样的写法都是没问题的因为数组也是一个对象可以放在list中。List转化为数组Listint[] list 想转化为list就可以通过list.toArray()方法直接转化为二维数组。代码实现publicint[][] merge(int[][] intervals) { if (intervals.length0) { returnnewint[0][2]; } if(intervals.length1) { returnintervals; } //这里是对二维数组按左边界排序 Arrays.sort(intervals, newComparatorint[]() { publicintcompare(int[] interval1, int[] interval2) { returninterval1[0] -interval2[0]; } }); //把数组装到list中 Listint[]mergednewArrayList(); intstartintervals[0][0]; intend intervals[0][1]; for (inti0; iintervals.length;) { while (iintervals.length) { if (intervals[i][0] end) { break; } endMath.max(end, intervals[i][1]); } merged.add(newint[]{start, end}); if (iintervals.length) { break; } startintervals[i][0]; endintervals[i][1]; } //list转为二维数组 returnmerged.toArray(newint[merged.size()][]); }