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] 可被视为重叠区间。

    解题思路

    • 给出的区间集合不一定有序,所以需要先进行排序
    • 排序后建立新的链表,并尾插入原链表的第一个元素
    • 从原链表的第二个元素进行遍历,并与新链表的最后一个元素进行比较,如果有重合的区间,则更新新链表的最后一个元素,否则,直接插入遍历到的原链表的元素

    代码实现

    package MySolution;
    
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.LinkedList;
    import java.util.List;
    
    public class Interval {
        int start;
        int end;
        Interval() { start = 0; end = 0; }
        Interval(int s, int e) { start = s; end = e; }
    }
    
    class Solution {
        public List<Interval> merge(List<Interval> intervals) {
    // 注意此处比较器接口的写法 Collections.sort(intervals,
    new Comparator<Interval>() { @Override public int compare(Interval o1, Interval o2) { if(o1.start<o2.start) return -1; else if(o1.start<o2.start) return 1; else return 0; } }); LinkedList<Interval> mergediIntervals=new LinkedList<Interval>();
         // 对空表的处理(鲁棒性)
    if(intervals.isEmpty()) return mergediIntervals;
    mergediIntervals.add(intervals.get(
    0)); for(int i=1;i<intervals.size();i++){ if(mergediIntervals.getLast().end<intervals.get(i).start) mergediIntervals.addLast(intervals.get(i)); else mergediIntervals.getLast().end=intervals.get(i).start; } return mergediIntervals; } }

    代码注意事项

    • 先考虑对特殊情况的处理(List空)
    • 自定义排序模板:
      Collections.sort(list, new Comparator<T>() {
          @Override
          public int compare(T o1, T o2) {
              // TODO Auto-generated method stub
              return 0;
          }
      });
  • 相关阅读:
    JavaScript 金字塔
    最短路径—Dijkstra算法和Floyd算法
    Qt编程的一些技巧
    Qt-Creator 加入qwt库
    关于usr/bin/ld: cannot find -lxxx问题总结(Qt编译错误cannot find -lGL)
    根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统
    tslib1.4与Qt4.8.6的交叉编译与移植
    用树莓派做3G无线路由器
    python学习笔记6:面向对象
    pyhton学习笔记5:常用模块:datatime,random,json,re
  • 原文地址:https://www.cnblogs.com/ustctp/p/9046868.html
Copyright © 2011-2022 走看看