merge-intervals
来源:互联网 发布:java网上商城系统源码 编辑:程序博客网 时间:2024/06/05 02:47
packagecom.ytx.array;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
/** 题目:merge-intervals
*
* 描述: 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].
*
*@authoryuantian xin
*
* 给一个包含若干区间的集合,合并所有重叠的区间。
*
* 思路:先对区间排序,按每个区间的start值从小到大排序。然后申请一个新容器,首先把
* 第一个区间存入容器,然后从第二个区间开始遍历,如果遍历的当前区间的start开始值小于等于
* 上一个已存入容器区间的结束值end,则说明有重叠部分,容器里区间的end值更新为当前
* 区间end值和原来值的较大值,如果不重叠,直接将当前区间存入容器中。
*
* 给出C++代码:
*
class Solution {
public:
staticbool comp(const Interval &a, const Interval &b) {
return (a.start < b.start);
}
vector<Interval>merge(vector<Interval>&intervals) {
vector<Interval>res;
if (intervals.empty()) return res;
sort(intervals.begin(), intervals.end(),comp);
res.push_back(intervals[0]);
for (int i = 1; i< intervals.size(); ++i) {
if (res.back().end >= intervals[i].start) {
res.back().end = max(res.back().end, intervals[i].end);
} else {
res.push_back(intervals[i]);
}
}
return res;
}
};
*/
classInterval {
intstart;
intend;
Interval() {start = 0; end = 0;};
Interval(ints,int e) {
start= s;
end= e;
}
}
publicclass Merge_Intervals {
publicArrayList<Interval> merge(ArrayList<Interval>intervals) {
if(intervals.size() < 2) returnintervals;
//按照区间的start从小到大排序
Collections.sort(intervals,new Comparator<Interval>() {
@Override
publicint compare(Interval inter1, Intervalinter2) {
if(inter1.start== inter2.start) {
returninter1.end- inter2.end;
}
returninter1.start- inter2.start;
}
});
//申请一个新的容器来装结果
ArrayList<Interval>result = newArrayList<Interval>();
//把第一个区间加入结果集
result.add(intervals.get(0));
for(inti = 1; i < intervals.size();i++) {
//如果结果集中最后一个区间的end大于等于当前遍历区间的start,说明二者有重叠部分
if(result.get(result.size() - 1).end>= intervals.get(i).start) {
result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end,intervals.get(i).end);
}else {
result.add(intervals.get(i));
}
}
returnresult;
}
publicstatic void main(String[]args) {
ArrayList<Interval>intervals = newArrayList<Interval>();
Intervali1 = newInterval(1,3);
Intervali2 = newInterval(2,6);
Intervali3 = newInterval(8,10);
Intervali4 = newInterval(15,18);
intervals.add(i1);
intervals.add(i2);
intervals.add(i3);
intervals.add(i4);
ArrayList<Interval>result = newArrayList<Interval>();
result= new Merge_Intervals().merge(intervals);
for(inti = 0; i < result.size();i++) {
System.out.println("["+ result.get(i).start+
","+ result.get(i).end+ "]");
}
}
}
阅读全文
0 0
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- merge intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- 怎样运用ABBYY FineReader旧版本中的设置
- android studio项目设定打包出来的APK只包含armeabi类型
- 实习了两个月
- 关于UGUI实现UI动画
- 静态方法(属性)与实例方法(属性)
- merge-intervals
- Spring Data Elasticsearch 官方文档翻译
- 【06】Bootstrap — 表格
- poj2299——BIT求逆序数
- Provisional headers are shown
- 学习 Android O HIDL
- MySQL DBA的修炼与未来,看看老司机们怎么说?
- uml 类图表示构建面向对象的系统
- 《LoadRunner 没有告诉你的》之一——描述性统计与性能结果分析