题解 | #合并区间#

合并区间

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;
    }
};
全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务