[Leetcode Week2]Merge Intervals
Merge Intervals题解
原创文章,拒绝转载
题目来源:https://leetcode.com/problems/merge-intervals/description/
Description
Given a collection of intervals, merge all overlapping intervals.
Example
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
Solution
/* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> resultVector;
if (intervals.size() == 0)
return resultVector;
int size = intervals.size();
int i, j, rsize;
resultVector.push_back(intervals[0]);
Interval tempInterval;
bool is_finish;
for (i = 1; i < size; i++) {
tempInterval.start = intervals[i].start;
tempInterval.end = intervals[i].end;
is_finish = false;
while (!is_finish) {
if (resultVector.size() == 0) {
resultVector.push_back(tempInterval);
break;
}
for (j = 0; j < resultVector.size(); j++) {
if ( (tempInterval.end >= resultVector[j].start && tempInterval.end <= resultVector[j].end) ||
(tempInterval.start >= resultVector[j].start && tempInterval.start <= resultVector[j].end) ||
(tempInterval.start <= resultVector[j].start && tempInterval.end >= resultVector[j].end)) {
tempInterval.start = tempInterval.start < resultVector[j].start ? tempInterval.start : resultVector[j].start;
tempInterval.end = tempInterval.end > resultVector[j].end ? tempInterval.end : resultVector[j].end;
resultVector.erase(resultVector.begin() + j);
break;
}
if (j == resultVector.size() - 1) {
resultVector.push_back(tempInterval);
is_finish = true;
break;
}
}
}
}
return resultVector;
}
};
解题描述
这道题还是费了一番周折去解决的。可能一开始的想法就是不想使用暴力破解的方法,想试着看看在解决问题的过程中就实现优化,减少遍历次数,但是却弄巧成拙出了些莫名奇妙的bug,一度WA好几次。最后还是妥协了,“先做到,再做好”,使用暴力破解,也就是通过不断更新即将插入结果容器的区间的上下界,每次更新完再重复遍历结果容器,以达到完全排除区间有交叠的情况。
[Leetcode Week2]Merge Intervals的更多相关文章
- 【LeetCode】Merge Intervals 题解 利用Comparator进行排序
题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int e ...
- 【leetcode】Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- 【leetcode】Merge Intervals(hard)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- 【leetcode】 Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- leetcode 56. Merge Intervals 、57. Insert Interval
56. Merge Intervals是一个无序的,需要将整体合并:57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的. 56. Me ...
- LeetCode 56. Merge Intervals (合并区间)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- LeetCode: 56. Merge Intervals(Medium)
1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...
- Java for LeetCode 056 Merge Intervals
Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...
- Leetcode#56 Merge Intervals
原题地址 排序+合并,没啥好说的 第一次尝试C++的lambda表达式,有种写js的感觉,很神奇 c11就支持了lambda表达式,仔细想想,我学C++大概就是在09~10年,c11还没有发布,不得不 ...
随机推荐
- C++学习001-注释
天了噜,感觉自己最近好堕落啊, 在等待项目任务书到来的时候,在来好好学习学习C++ 今天来学习一下C++的注释风格 编写环境 Qt 5.7 1. //注释 // ui->setupUi(thi ...
- 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5
孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
- Leetcode 686.重复叠加字符串匹配
重复叠加字符串匹配 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd", ...
- 安装arch系统时,把ubuntu的efi分区格式化
导致无法从grub进入ubuntu,之后我进入win10,把ubuntu的分区都删了. 再重启,只能进入黑色的grub界面,显示 grub>> 甚至无法进入win10.只能通过在开机时按F ...
- java设计模式之模版方法模式以及在java中作用
模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...
- 微信公众号开发java框架:wx4j(KefuUtils篇)
wx4j-KefuUtils介绍 函数说明:添加客服 参数:Kefu对象 返回值:微信服务器响应的json字符串 public String addKefu(Kefu kefu) 函数说明: 参数:K ...
- 在vue-cli创建的项目里配置scss
第一步,gitbash进入到项目目录 npm install node-sass --save-dev npm install sass-loader --save-dev 第二步:打开webpack ...
- 变量可以通过into赋值
- BZOJ4651 NOI2016网格(割点)
首先显然可以通过孤立角落里的跳蚤使其不连通,所以只要有解答案就不会大于2.同样显然的一点是当且仅当跳蚤数量<=2且连通时无解.做法其实也很显然了:特判无解,若跳蚤不连通输出0,否则看图中是否无割 ...
- BZOJ4560 JLOI2016字符串覆盖(kmp+贪心+状压dp+单调队列)
首先kmp求出每个子串能放在哪些位置.接下来的两部分贪心和状压都可以,各取比较方便的. 最大值考虑贪心.考虑枚举子串的左端点出现顺序,在此基础上每个子串的位置肯定都应该尽量靠前,有是否与上个子串有交两 ...