Medium
Given an array of intervals
where intervals[i] = [starti, endi]
, merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Example 1:
Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Constraints:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
To solve the “Merge Intervals” problem in Swift with the Solution class, follow these steps:
merge
in the Solution
class that takes an array of integer arrays intervals
as input and returns an array of the non-overlapping intervals that cover all the intervals in the input.Here’s the implementation of the merge
method in Swift:
class Solution {
func merge(_ intervals: [[Int]]) -> [[Int]] {
guard intervals.count > 1 else { return intervals }
var intervals = intervals
intervals.sort{ a, b in
a[0] < b[0]
}
// print("int : \(intervals)")
var j = 0
var merged = [intervals[0]]
while j < intervals.count {
let first = merged.removeLast()
let second = intervals[j]
if first[0] <= second[0] && first[1] >= second[1] {
merged.append([first[0], first[1]])
} else if second[0] <= first[0] && second[1] >= first[1] {
merged.append([second[0], second[1]])
} else if first[1] >= second[0] && first[0] <= second[0] {
merged.append([first[0], second[1]])
} else {
merged.append(first)
merged.append(second)
}
j += 1
}
return merged
}
}
This implementation efficiently merges overlapping intervals in the given array intervals
using sorting and iteration, with a time complexity of O(n log n) due to sorting.