关闭

合并区间

56人阅读 评论(0) 收藏 举报
分类:

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

样例

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

[                     [
  [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;
    }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6952次
    • 积分:936
    • 等级:
    • 排名:千里之外
    • 原创:91篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    最新评论