Cover image for Classic Interview 150 Questions P56 Merge Intervals

Classic Interview 150 Questions P56 Merge Intervals


Timeline

Timeline

2025-11-18

init

range

Problem:

Sort by the left boundary of the intervals, then merge intervals sequentially from left to right.

123456789101112131415161718192021222324252627282930313233343536
#include <vector>#include <algorithm>using std::vector;class Solution {    public:        vector<vector<int> > merge(vector<vector<int> > &intervals)        {                int i, n = intervals.size(), left, right, last_left, last_right;                vector<vector<int> > res;                vector<int> last;                std::sort(intervals.begin(), intervals.end(),                          [](vector<int> &vec1, vector<int> &vec2) { return vec1[0] < vec2[0]; });                last = intervals[0];                for (i = 1; i < n; i++) {                        left = intervals[i][0];                        right = intervals[i][1];                        last_left = last[0];                        last_right = last[1];                        if (left <= last_right && right > last_right) {                                last = { last_left, right };                        } else if (left <= last_right && right <= last_right) {                                continue;                        } else if (left > last_right) {                                res.push_back(last);                                last = intervals[i];                        }                }                res.push_back(last);                return res;        }};

leetcode hot 100 rewrite

12345678910111213141516171819202122232425262728293031323334
#include <vector>#include <algorithm>using std::vector;class Solution {    public:        vector<vector<int> > merge(vector<vector<int> > &intervals)        {                int i, n = intervals.size();                std::sort(intervals.begin(), intervals.end(),                          [](vector<int> &a, vector<int> &b) { return a[0] < b[0]; });                vector<vector<int> > res;                vector<int> last = intervals[0];                for (i = 1; i < n; i++) {                        vector<int> curr = intervals[i];                        // try to merge curr and last                        if (curr[0] >= last[0] && curr[0] <= last[1]) { // can merge                                last = { last[0], std::max(curr[1], last[1]) };                        } else {                                res.push_back(last);                                last = curr;                        }                }                res.push_back(last);                return res;        }};
Loading comments…