合并区间

原创 2016年05月31日 14:49:35

给出若干闭合区间,合并所有重叠的部分。

样例

给出的区间列表 => 合并后的区间列表:

[                     [
  [1, 3],               [1, 6],
  [2, 6],      =>       [8, 10],
  [8, 10],              [15, 18]
  [15, 18]            ]
]
/**
 * Definition 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;
    }
}

C语言多区间合并的简单实现

  • 2014年05月20日 10:39
  • 4KB
  • 下载

相邻区间合并

  • 2013年04月01日 23:55
  • 799B
  • 下载

HDU 3308 LCIS (线段树·单点更新·区间合并)

题意  给你一个数组  有更新值和查询两种操作  对于每次查询  输出对应区间的最长连续递增子序列的长度 基础的线段树区间合并  线段树维护三个值  对应区间的LCIS长度(lcis)  对应区间以...
  • acvay
  • acvay
  • 2015年08月11日 09:01
  • 826

LintCode 合并区间

1.描述 给出若干闭合区间,合并所有重叠的部分。 2.分析 首先对得到的若干闭合区间进行排序,由小到大依次判断是否有重叠的部分。 两个区间若有重叠一定是一个区间的尾大于另一个区间的头才可以包括...

hdu1540之线段树单点更新+区间合并

Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

hdu 2871 Memory Control(成段更新,区间合并)

题意:给n个单位内存(编号从1开始),有几种操作:Reset把所有的内存清空,然后输出“Reset Now”。New x申请一块长度为x的内存块(如多解,左边优先),然后输出“New at A”。Fr...

Atlantis hdu 1542 线段树 扫面线 区间合并

http://acm.hdu.edu.cn/showproblem.php?pid=1542

hdu 5052 树链剖分+线段树+区间合并

各种裸,但合在一起好恶心... 因为路径是有向的,所以要维护区间里向两个方向走的最大收益和区间里的最大最小值,要用到区间合并的线段树 #include #include #include #...

poj-3667 Hotel (线段树区间合并)

he cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacati...

HDU3308:LCIS(线段树区间合并)

Problem Description Given n integers. You have two operations: U A B: replace the Ath number by B...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:合并区间
举报原因:
原因补充:

(最多只允许输入30个字)