力扣 56. 合并区间
我在做这道题56. 合并区间时遇到一些问题,记录一下。这道题仍然是寻找重复的区间,我一开始理解错题意,以为要把合并之后的区间里面每一个元素都加到结果数组里面。具体讲一下这道题。我们可以根据一个区间的左边界是否和前一个区间的有边界是否重合(挨在一起也算重合),来决定是否把当前区间和前一个区间合并,在处理重合的情况时,要注意把结果数组的最后一个区间删除掉,然后添加新的区间,当然这个新区间的左边界是结果数组的最后一个区间的左边界。我一开始想的是用一个ArrayList嵌套另一个ArrayList,然后转为数组,这样做有些麻烦,可以直接用ArrayList保存数组,然后使用 arr1.toArray(new int[arr1.size()][] ) 这个方法。代码如下
class Solution { public int[][] merge(int[][] intervals) { if(intervals.length==1)return intervals; Arrays.sort(intervals, (a,b)->Integer.compare(a[0],b[0])); LinkedList<int[]> arr1 =new LinkedList<>(); arr1.add(intervals[0]); int start=0; int end=0; for(int i=1; i<intervals.length; i++){ if(intervals[i][0]>arr1.getLast()[1]){ arr1.add(intervals[i]); } else { start=arr1.getLast()[0]; end=Math.max(arr1.getLast()[1], intervals[i][1]); arr1.removeLast(); arr1.add(new int[]{start, end}); } } return arr1.toArray(new int[arr1.size()][]); } }