wordpress常用頁(yè)面百度seo服務(wù)公司
這道題可以用列表來(lái)寫,首先對(duì)所有的數(shù)組區(qū)間依據(jù)第一個(gè)數(shù)字進(jìn)行排序,然后創(chuàng)建一個(gè)數(shù)組列表存放合并重疊后的結(jié)果。
如果列表為空,或者當(dāng)前區(qū)間的起始位置大于列表中區(qū)間的最后一個(gè)位置,則不重疊直接插入列表,否則合并區(qū)間。
這里合并起始位置不變,依據(jù)區(qū)間末尾最大的那個(gè)數(shù)作為結(jié)尾。
最后利用toArray方法,把列表轉(zhuǎn)成二維數(shù)組輸出。
代碼如下:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;// 合并區(qū)間
public class Solution2 {public int[][] merge(int[][] intervals) {//首先對(duì)區(qū)間按照起始位置進(jìn)行排序Arrays.sort(intervals, Comparator.comparing(a->a[0]));List<int[]>merged=new ArrayList<>();//遍歷排序后的區(qū)間for(int[] interval:intervals){//如果結(jié)果列表為空,或者當(dāng)前區(qū)間的起始位置大于結(jié)果列表中最后一個(gè)區(qū)間的結(jié)束位置//則說(shuō)明沒(méi)有重疊,直接將當(dāng)前區(qū)間添加到結(jié)果列表中if(merged.isEmpty()||merged.get(merged.size()-1)[1]<interval[0]){merged.add(interval);}else {//存在重疊需要合并區(qū)間merged.get(merged.size()-1)[1]=Math.max(merged.get(merged.size()-1)[1],interval[1]);}}//將結(jié)果列表轉(zhuǎn)換成二維數(shù)組并返回return merged.toArray(new int[merged.size()][]);}
}
?1.比較器
Comparator.comparingInt(a -> a[0])
?創(chuàng)建了一個(gè)比較器,該比較器根據(jù)整數(shù)數(shù)組的第一個(gè)元素的值來(lái)比較兩個(gè)整數(shù)數(shù)組。如果第一個(gè)數(shù)組的第一個(gè)元素小于第二個(gè)數(shù)組的第一個(gè)元素,則比較器認(rèn)為第一個(gè)數(shù)組“小于”第二個(gè)數(shù)組(在排序的上下文中)。
2.區(qū)間比較
merged.get(merged.size()-1)[1] < interval[0]
:這個(gè)條件判斷語(yǔ)句的意思是,如果merged
列表中最后一個(gè)區(qū)間的結(jié)束位置小于當(dāng)前interval
區(qū)間的起始位置,則條件為真。這種情況表明merged
列表中的最后一個(gè)區(qū)間與interval
區(qū)間沒(méi)有重疊,因?yàn)樗鼈兊慕Y(jié)束位置和起始位置之間有空隙。