题解 | #合并区间#

合并区间

https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a

/**
 * struct Interval {
 *  int start;
 *  int end;
 *  Interval(int s, int e) : start(start), end(e) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param intervals Interval类vector
     * @return Interval类vector
     */
    static bool cmp(const Interval& a, const Interval& b) {
        return a.start < b.start;

    }


    vector<Interval> merge(vector<Interval>& intervals) {
        // write code here
        if (intervals.size() < 2) return intervals;
        vector<Interval>ans;
        sort(intervals.begin(), intervals.end(), cmp);

        Interval temp = intervals[0];

        for (int i = 1; i < intervals.size(); i++) {
            if (temp.end >= intervals[i].start) {
                temp.start = min(temp.start, intervals[i].start);
                temp.end = max(temp.end, intervals[i].end);
            } else {
                ans.emplace_back(temp);
                temp = intervals[i];
            }
        }
        ans.emplace_back(temp);
        return ans;
    }
};

合并区间,首先排序,如何判断重叠,在有序状态下,左区间的end大于右区间的start说明有重叠,有重叠就合并,比较两个区间的边界取范围更大的。如果没有重叠,则当前区间不需要合并。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务