合并区间
2016-05-31 14:49
239 查看
给出若干闭合区间,合并所有重叠的部分。
样例
给出的区间列表 => 合并后的区间列表:
/**
* Def
4000
inition of Interval:
* public class Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
*/
class Solution {
/**
* @param intervals: Sorted interval list.
* @return: A new sorted interval list.
* 先对各个区间根据start的大小排序
* 之后在比较连续的区间的start 和 end
*/
public List<Interval> merge(List<Interval> intervals) {
// write your code here
//先根据每个区间的起始位置数值,从小到大排序;
int pos=0;
Interval temp=new Interval(0,0);
for(int i=1;i<intervals.size();i++){
pos=i-1;//pos保存待插入位置
//temp保存待插入对象
temp=intervals.get(i);
//如果pos大于或等于0,且i对象值比pos对象值还要小,则pos往前挪一位,知道找到合适的位置;
while(pos>=0&&(intervals.get(i).start<intervals.get(pos).start)){
pos--;
}
//将集合中原来的i处对象删除,在pos+1处添加上temp对象
intervals.remove(i);
intervals.add(pos+1, temp); //add之后所有元素会后移
}
int i=0;
while(i<intervals.size()-1){
//顺序很重要!!!!!!
if(intervals.get(i).end >= intervals.get(i+1).end){
//[1,6],[1,5]类型
intervals.remove(i+1);
}else if(intervals.get(i).end >= intervals.get(i+1).start){
//[1,3],[2,6]类型
intervals.get(i).end=intervals.get(i+1).end;
intervals.remove(i+1);
}else{
i++;
}
}
return intervals;
}
}
样例
给出的区间列表 => 合并后的区间列表:
[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ]
/**
* Def
4000
inition of Interval:
* public class Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
*/
class Solution {
/**
* @param intervals: Sorted interval list.
* @return: A new sorted interval list.
* 先对各个区间根据start的大小排序
* 之后在比较连续的区间的start 和 end
*/
public List<Interval> merge(List<Interval> intervals) {
// write your code here
//先根据每个区间的起始位置数值,从小到大排序;
int pos=0;
Interval temp=new Interval(0,0);
for(int i=1;i<intervals.size();i++){
pos=i-1;//pos保存待插入位置
//temp保存待插入对象
temp=intervals.get(i);
//如果pos大于或等于0,且i对象值比pos对象值还要小,则pos往前挪一位,知道找到合适的位置;
while(pos>=0&&(intervals.get(i).start<intervals.get(pos).start)){
pos--;
}
//将集合中原来的i处对象删除,在pos+1处添加上temp对象
intervals.remove(i);
intervals.add(pos+1, temp); //add之后所有元素会后移
}
int i=0;
while(i<intervals.size()-1){
//顺序很重要!!!!!!
if(intervals.get(i).end >= intervals.get(i+1).end){
//[1,6],[1,5]类型
intervals.remove(i+1);
}else if(intervals.get(i).end >= intervals.get(i+1).start){
//[1,3],[2,6]类型
intervals.get(i).end=intervals.get(i+1).end;
intervals.remove(i+1);
}else{
i++;
}
}
return intervals;
}
}
相关文章推荐
- App测试那些不可言说的痛
- BI领导驾驶舱的功能特点
- View的位置参数简介
- Android.mk文件分析
- 架构设计:系统间通信(33)——其他消息中间件及场景应用(下3)
- centos6.7 配置外网端口映射
- linux动态库加载的秘密
- TextView上下滑动
- spring quartz集群
- 下拉框自动实现自动填充
- 遇到的问题(一)——editText软键盘不是自动弹出的吗,为什么宝宝的不弹?
- Redis基础教程第5节 远程访问 Redis 基于 C#/Python
- 将整数A转换为B
- oracle SQL 错误: ORA-02014: 不能从具有 DISTINCT, GROUP BY 等的视图选择 FOR UPDATE
- EventBus 3.0的用法详解
- PullreFreshLibrary(PullToRefreshListView)上拉刷新,下拉加载(—)
- 小板匹配 从上层到下层
- 搜索jar包中的文件
- Android 5.0设置全屏无标题
- Underscore.js 的模板功能介绍与应用