classSolution{privatestaticclassInterval{int start;int end;Interval(int[] interval){this.start = interval[0];this.end = interval[1];}int[]toArray(){returnnewint[]{this.start,this.end};}}privatestaticclassIntervalComparatorimplementsComparator<Interval>{@Overridepublicintcompare(Interval a, Interval b){return Integer.compare(a.start, b.start);}}publicint[][]insert(int[][] intervals,int[] newInterval){
List<Interval> intervalsList =newLinkedList<>();for(int[] interval : intervals){
intervalsList.add(newInterval(interval));}
intervalsList.add(newInterval(newInterval));
intervalsList.sort(newIntervalComparator());
LinkedList<Interval> merged =newLinkedList<>();for(Interval interval : intervalsList){// if the list of merged intervals is empty or if the current// interval does not overlap with the previous, simply append it.if(merged.isEmpty()|| merged.getLast().end < interval.start){
merged.add(interval);}// otherwise, there is overlap, so we merge the current and previous// intervals.else{
merged.getLast().end = Math.max(merged.getLast().end, interval.end);}}int i =0;int[][] result =newint[merged.size()][2];for(Interval mergedInterval : merged){
result[i]= mergedInterval.toArray();
i++;}return result;}}
解法二:贪心算法,先将比新数组小的数组加入,再合并后面的几项。
classSolution{publicint[][]insert(int[][] intervals,int[] newInterval){// init dataint newStart = newInterval[0], newEnd = newInterval[1];int idx =0, n = intervals.length;
LinkedList<int[]> output =newLinkedList<int[]>();// add all intervals starting before newIntervalwhile(idx < n && newStart > intervals[idx][0])
output.add(intervals[idx++]);// add newIntervalint[] interval =newint[2];// if there is no overlap, just add the intervalif(output.isEmpty()|| output.getLast()[1]< newStart)
output.add(newInterval);// if there is an overlap, merge with the last intervalelse{
interval = output.removeLast();
interval[1]= Math.max(interval[1], newEnd);
output.add(interval);}// add next intervals, merge with newInterval if neededwhile(idx < n){
interval = intervals[idx++];int start = interval[0], end = interval[1];// if there is no overlap, just add an intervalif(output.getLast()[1]< start) output.add(interval);// if there is an overlap, merge with the last intervalelse{
interval = output.removeLast();
interval[1]= Math.max(interval[1], end);
output.add(interval);}}return output.toArray(newint[output.size()][2]);}}
作者:LeetCode
链接:https://leetcode-cn.com/problems/insert-interval/solution/cha-ru-qu-jian-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。