题解 | #合并区间#

合并区间

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;


    }
};

官解做法 和我思路一样 只是不用栈

全部评论

相关推荐

2024-11-20 18:25
安徽大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务