Lien de rubrique: Intervalle de fusion LeeCode56
Description de la rubrique:
Trier d'abord (trier par le premier chiffre d'un tableau à deux dimensions), et utiliser une file d'attente pour stocker la séquence actuelle à résoudre (ne pas savoir si la plage suivante chevauche la plage actuelle séquence à résoudre). Lorsque la limite droite de la séquence à résoudre est plus petite que la limite gauche de la séquence suivante, quittez la file d'attente, placez la séquence suivante, etc. Pour ce problème, vous devez faire attention à la probabilité que le la longueur du tableau est plus petite que la longueur du tableau d'origine, vous devriez donc ouvrir un autre transfert de tableau.Maintenant, s'il y a un grand gars, il m'apprendra d'autres façons, également qaq
class Solution {
public static int[][] merge(int[][] intervals) {
Queue<int[]> queue=new ArrayDeque<>();
int [][] ans=new int[intervals.length][2];
int index=0;
Arrays.sort(intervals,(a,b)->a[0]-b[0]);
queue.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
int[] peek = queue.poll();
if(peek[1]>=intervals[i][0]){
if(peek[1]<intervals[i][1]){
peek[1]=intervals[i][1];
}
queue.add(peek);
}else{
ans[index][0]=peek[0];
ans[index++][1]=peek[1];
queue.add(intervals[i]);
}
}
if(!queue.isEmpty()){
int[] poll = queue.poll();
ans[index][0]=poll[0];
ans[index++][1]=poll[1];
}
int[][] ans1=new int[index][2];
for (int i = 0; i < index; i++) {
ans1[i]=Arrays.copyOf(ans[i],2);
}
return ans1;
}
}