zoukankan      html  css  js  c++  java
  • leetcode合并区间

    合并区间
     
     

    给出一个区间的集合,请合并所有重叠的区间。

    示例 1:

    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
    

    示例 2:

    输入: [[1,4],[4,5]]
    输出: [[1,5]]
    解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

    思路:我们采用非常直观的思维,观察各个区间,既然要对区间排列,首先对区间排序,使其按照左端点的大小进行排列。这里要用到数据结构的Collections.sort来进行排序。

      需要了解Collections.sort( list ,new Comparator<  >()  );的排序写法。  注意这里很容易出错。

      排序完之后,进行区间的划分。 首先将第一个区间作为比较区间temp

    遍历整个List。 存在以下情况:1.如果temp的左端点和遍历区间的左端点不相交,当前temp加入数组,更新temp。

                  2.如果相交,那么当前区间的右端点小于遍历数组的右端点,更新temp的右端点。

                  因为区间按照左端点排序,不需要再处理左端点。

                  3.相交之下,如果当前区间右端点包含遍历区间,什么也不用做。

                  遍历完之后,把temp加入list。

    /**
     * Definition for an interval.
     * public class Interval {
     *     int start;
     *     int end;
     *     Interval() { start = 0; end = 0; }
     *     Interval(int s, int e) { start = s; end = e; }
     * }
     */
    class Solution {List<Interval> list=new ArrayList();
        public List<Interval> merge(List<Interval> intervals) {
            if(intervals.size()==0)return list;         //list为空的情况,直接判出。
            //Collections.sort()的具体用法。 比较对象是Interval这个类。最后将表按照左端点的顺序排列
           Collections.sort(intervals,new Comparator<Interval>(){
              public int compare(Interval a,Interval b){
                  return a.start-(b.start);
              }
           });
            Interval temp=intervals.get(0);
            for(Interval aa:intervals){         //遍历表,判断3种条件。
                if(temp.end<aa.start){
                    list.add(temp);
                    temp=aa;
                }else {
                    if(temp.end>=aa.end){
                        temp=temp;
                    }else{
                        temp.start=temp.start;
                       temp.end=aa.end;
                    }
                }
                
            }
            list.add(temp);
            return list;
        }
       
    }
  • 相关阅读:
    CSS3很强大
    Notepad++关闭时自动保留,不弹出提示保存对话框
    数据库中更新或插入表记录
    手动指定网卡优先顺序方法
    在Excel中转换时间戳(timeStamp)
    format z: /p:3 & cipher /w z:abc
    修改eclipse中M2_REPO变量值
    Windows 10 主题的图片位置
    MySQL中 delete from 时提示 1064 错误。
    left join 中 on 与 where 理解
  • 原文地址:https://www.cnblogs.com/patatoforsyj/p/9558109.html
Copyright © 2011-2022 走看看