notes/OJ notes/pages/Leetcode Merge-Intervals.md
2022-09-01 14:14:08 +08:00

1.8 KiB

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


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

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;
  }
};