Merge Intervals

举报
程序员历小冰 发表于 2021/08/27 22:36:47 2021/08/27
【摘要】 题目简介: Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. /...

题目简介:

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].


  
  1. /**
  2. * Definition for an interval.
  3. * struct Interval {
  4. * int start;
  5. * int end;
  6. * Interval() : start(0), end(0) {}
  7. * Interval(int s, int e) : start(s), end(e) {}
  8. * };
  9. */


1 先要对输入的vector进行排序,排序的代码如下,这样就可以区别vector排好序的interval之间的start是有顺序的.避免了之后判断是否合并的复杂度


  
  1. sort(intervals.begin(),intervals.end(),compare);
  2. bool compare(const Interval &inter1,const Interval &inter2) {
  3. return inter1.start<inter2.start;
  4. }


  
  1. if (cur.end>=inter2.start) { //可以合并
  2. cur.end=max(cur.end,inter2.end);
  3. } else {
  4. result.push_back(cur);
  5. cur=inter2;
  6. }

1 没有注意处理到vector最后一个interval的时候,可能会少向结果列表中加入最后一个interval

例如输入为 [[1,4],[1,4]] 我的输出直接就是[ ],也就是没有向结果列表加入任何东西啦.这就是经常遇到的末端错误啊.很多遍历的算法都可能会忽略列表末尾的逻辑处理,以后要消息啊.


文章来源: blog.csdn.net,作者:程序员历小冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/u012422440/article/details/44040153

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。