Intervalo de fusión de algoritmos

Intervalo de fusión de algoritmos

Intervalo de fusión de algoritmos

Esta pregunta también es bastante interesante.
LeetCode (LeetCode56)

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

La idea es muy clara, la trilogía:

1. Ordene para asegurarse de que la posición inicial del intervalo anterior en la matriz bidimensional sea siempre menor o igual que la posición inicial
del siguiente intervalo 2. Cuando la posición inicial del último intervalo es mayor que la posición final del intervalo anterior, agregamos un nuevo intervalo
3. Si no se cumple esta condición, debemos fusionar los intervalos. El intervalo combinado puede ser el final del intervalo anterior o el final del último intervalo. La necesidad específica de comparar

    public int[][] merge(int[][] intervals) {
    
    
    	//排序,确保二维数组中前一个区间的起始位置总是小于或等于后一个区间的起始位置
        Arrays.sort(intervals,(o1,o2)->o1[0]-o2[0]);
        ArrayList<int[]> list=new ArrayList<>();
        for(int i=0;i<intervals.length;i++){
    
    
        	//满足后一个区间的起始位置大于前一个区间的结束位置,我们添加新区间
            if(list.size()==0||list.get(list.size()-1)[1]<intervals[i][0]){
    
    
                list.add(intervals[i]);
            }else{
    
    //不满足此条件的话我们需要合并区间,合并后的区间可能是前一个区间的末尾也可能是后一个区间的末尾,具体需要比较
                list.get(list.size()-1)[1]=Math.max(intervals[i][1],list.get(list.size()-1)[1]);
            }
        }
        //转化成二维数组
        return list.toArray(new int[list.size()][2]);
    }

Supongo que te gusta

Origin blog.csdn.net/qq_23594799/article/details/105329818
Recomendado
Clasificación