题解 | #合并区间#
合并区间
https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class Solution { public: // 排序 static bool comp(const Interval& a, const Interval& b) { return a.start < b.start; // 增序排序 } // 之前笔试时遇到过相似的题 // 先用 O(Nlogn) 时间来做下 空间O(N) // 再写一遍官解做法 不需要是栈其实 vector<Interval> merge(vector<Interval>& intervals) { int n = intervals.size(); if (n < 2) { return intervals; } // 排序 sort(intervals.begin(), intervals.end(), comp); vector<Interval> ans; ans.push_back(intervals[0]); // stack<Interval> stk; // stk.push(intervals[0]); int i = 1; while(i<n) { // Interval a = stk.top(); Interval b = intervals[i]; if(ans.back().end >= b.start) // back() 就是末尾 { // 合并 // stk.pop(); // stk.push(Interval(a.start, max(a.end, b.end))); ans.back().end = max(ans.back().end, b.end); } else { // stk.push(b); ans.push_back(b); } i++; } // // 从栈中取出 // while(!stk.empty()) // { // ans.push_back(stk.top()); // stk.pop(); // } // sort(ans.begin(), ans.end(), comp); return ans; } };
官解做法 和我思路一样 只是不用栈