notes/OJ notes/pages/Leetcode Merge-Intervals.md
2022-09-06 20:22:48 +08:00

92 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Leetcode Merge-Intervals
#### 2022-09-01 14:04
> ##### Algorithms:
>
> #algorithm #sort
>
> ##### Data structures:
>
> #DS #array
>
> ##### Difficulty:
>
> #coding_problem #difficulty_medium
>
> ##### Additional tags:
>
> #leetcode
>
> ##### Revisions:
>
> N/A
##### Links:
- [Link to problem](https://leetcode.com/problems/merge-intervals/)
- [Solution ans Explanation](https://leetcode.com/problems/merge-intervals/solution/)
---
### Problem
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_.
#### Examples
**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] overlap, 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`
### Thoughts
> [!summary]
> This is a generic array problem.
#### Situations to consider:
- The intervals can be unordered
- The first interval
- `[0, 3] [0, 1]` are adjacent and overlapped.
To solve the situations, sort first, and use `max` function to solve the 3rd solution.
### Solution
```cpp
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>> &intervals) {
// sort first, so that data are continious
vector<vector<int>> ans;
sort(intervals.begin(), intervals.end());
for (auto interval : intervals) {
if (ans.empty() || ans.back()[1] < interval[0]) {
ans.push_back(interval);
} else {
ans.back()[1] = max(interval[1], ans.back()[1]);
}
}
return ans;
}
};
```