Problema: 56. Intervalos de fusión
Directorio de artículos
tren de pensamiento
Ordene la matriz de puntos finales izquierdos pequeños a grandes. Inicialice Merged y coloque el primer intervalo en él. Recorriendo intervalos, si el punto final izquierdo del intervalo actual es más grande que el punto final derecho del último intervalo combinado y no se superpone, agregue directamente el intervalo al final; de lo contrario, superponga y actualice el punto final derecho del último intervalo.
Código
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
// 合并区间
int n = intervals.size() ;
sort(intervals.begin() , intervals.end()) ;
vector<vector<int>> merged ;
merged.push_back(intervals[0]) ;
int r = intervals[0][1] ;
for(int i = 1 ; i<intervals.size() ; i++) {
int start = intervals[i][0] ;
int end = intervals[i][1] ;
// 如果当前的左端点小于之前的右,不重合
if(start > r) {
merged.push_back({
start,end}) ;
}else{
// 否则,重合,更新右端点
merged.back()[1] = max(merged.back()[1] ,end) ;
}
r = merged.back()[1] ;
}
return merged ;
}
};
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
# 合并区间
intervals.sort() # Sort the intervals based on their start points
merged = [intervals[0]]
r = intervals[0][1]
for i in range(1, len(intervals)):
start, end = intervals[i]
# If the current interval's start is greater than the previous interval's end, they don't overlap
if start > r:
merged.append([start, end])
else:
# Otherwise, they overlap, update the end point of the merged interval
merged[-1][1] = max(merged[-1][1], end)
r = merged[-1][1]
return merged