题解 | #合并区间#

合并区间

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

第一步 排序(start排序完, 在逆序排end)
[1,3], [1,2], [2,6], [2,4], [8,10],[15,18]

分两种情况合并区间
情况1: [1,2], [2,5] 则更新最后一组的end为5, 即[1,5]
情况2: [1,2], [4,8] 则直接插入[4,8]

class Solution {
public:
    struct myC{ // 按照第二位进行排序
        bool operator()(Interval &a, Interval &b){
            return a.start < b.start || (a.start==b.start && a.end>b.end); 
        }
    };
    // 第一种情况 [1.4], [2,8] 则更新为[1,8]
    // 第二种情况 [1,4], [6,10] 则插入[6,10]
    vector<Interval> merge(vector<Interval> &nums) {
        if(nums.empty()) return {};
        sort(nums.begin(), nums.end(), myC());
        vector<Interval> ans;
        ans.emplace_back(nums[0]);
        for(int i=1, n=nums.size(); i<n; i++){
            if(ans.back().end >= nums[i].start && ans.back().end < nums[i].end){
                ans.back().end = nums[i].end;
            }else if(ans.back().end < nums[i].start){
                ans.emplace_back(nums[i]);
            }
        }
        return ans;
    }
};
全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务