合并区间

来源:互联网 发布:天猫销售数据 编辑:程序博客网 时间:2024/05/19 23:26

描述

给出若干闭合区间,合并所有重叠的部分

样例

[ [1, 3], [2, 6], [8, 10], [15, 18] ] -> [ [1, 6], [8, 10], [15, 18 ]

思考

  1. 先对左边界进行排序,这样就只需要针对右边界的不同情况分别处理
  2. 右边界情况分为: 包含,交叉,不接触

代码

//  By Lentitude/** * Definition of Interval: * classs Interval { *     int start, end; *     Interval(int start, int end) { *         this->start = start; *         this->end = end; *     } */class Solution {public:    /**     * @param intervals: interval list.     * @return: A new interval list.     */    // 升序函数, 注意使用 static 可以避免冲突    static bool Cmp(const Interval &a, const Interval &b){        return a.start < b.start;    }     vector<Interval> merge(vector<Interval> &intervals) {        // write your code here        if (intervals.empty()) return intervals;        // 对该动态数组进行升序处理        sort(intervals.begin(), intervals.end(), Cmp);        int len = intervals.size();        int i = 0;        while (i < len - 1){            // 包含            if (intervals[i].end >= intervals[i + 1].end){                intervals.erase(intervals.begin() + i + 1);                --len;            }else if (intervals[i].end >= intervals[i + 1].start){                // 交叉                intervals[i].end = intervals[i + 1].end;                intervals.erase(intervals.begin() + i + 1);                --len;            }else{                // 不接触                ++i;            }        }        return intervals;    }};
0 0
原创粉丝点击