合并区间

原创 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;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

相邻区间合并

  • 2013-04-01 23:55
  • 799B
  • 下载

Codeforces 527C Glass Carving 线段树区间合并

传送门:  http://codeforces.com/contest/527/problem/C C. Glass Carving time limit per test 2 ...

nyoj737 石子合并 区间dp

描述     有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代...

hihoCoder - 1116 - 计算 (线段树区间合并)

线段树区间合并的题目套路就是每一段维护 1.当前段的答案data[k], 2.当前段所有前缀Left[k] 3.当前段所有后缀Right[k] 合并时由当前段的左右子节点的data转移当前段,...
  • Mtrix
  • Mtrix
  • 2016-09-25 15:32
  • 264

AOJ 2450 Do use segment tree (树链剖分 + 线段树区间合并)

题意: 一颗N<=2×105的树,Q<=105,两种操作一颗N<=2×10^5的树, Q v路径上的点权变为c1\ u\ v\ c, 将u->v路径上的点权变为c 2 u v c,查询u−>...
  • lwt36
  • lwt36
  • 2015-10-10 03:20
  • 334

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

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

HDU 3397 线段树区间合并

点击打开链接 题意:五种操作,0全部置0,1全部置1,2是0变1 1变0,3是询问1的个数,4是询问最长连续的1 思路:推荐先写hdu 3911 ,是这题的简单版,这题注意的地方就是一旦有置0和置...

HDU3308LCIS(区间合并)

题意:求最长连续上升子序列 方法:线段树区间合并,注意pushup的合并和查询时的合并#include #include #include #include #include #inclu...

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

http://acm.hdu.edu.cn/showproblem.php?pid=1542
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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