您的位置:首页 > 其它

合并区间

2016-05-31 14:49 239 查看
给出若干闭合区间,合并所有重叠的部分。

样例

给出的区间列表 => 合并后的区间列表:
[                     [
[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;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: