From 8f699a96692878ee217d3c00066335f34d8dfc46 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Fri, 28 Mar 2025 23:47:27 +0800 Subject: [PATCH] feat: 56_merge_intervals --- 56_merge_intervals/main.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 56_merge_intervals/main.cpp diff --git a/56_merge_intervals/main.cpp b/56_merge_intervals/main.cpp new file mode 100644 index 0000000..33e3b19 --- /dev/null +++ b/56_merge_intervals/main.cpp @@ -0,0 +1,33 @@ +#include +using namespace std; + +class Solution { + public: + vector> merge(vector>& intervals) { + sort(intervals.begin(), intervals.end(), [](vector a, vector b) { + if (b[0] > a[0]) return true; + if (b[0] < a[0]) return false; + return b[1] > a[1]; + }); + + vector> result; + + for (int i = 0; i < intervals.size(); i++) { + int currentStart = intervals[i][0], currentEnd = intervals[i][1]; + + int j = i + 1; + while (j < intervals.size() && + currentStart <= intervals[j][0] && + intervals[j][0] <= currentEnd) { + currentEnd = max(currentEnd, intervals[j][1]); + j++; + } + i = j - 1; + + vector toPush{currentStart, currentEnd}; + result.emplace_back(toPush); + } + + return result; + } +};