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;
          }
      });
  • 相关阅读:
    codevs1004 四子连棋
    codevs1009 产生数
    NOIP2014 寻找道路
    Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)
    随机算法
    线性基
    线性基入门
    线性基 + 并查集
    欧拉公式 (平面)
    卡特兰数 + 大数
  • 原文地址:https://www.cnblogs.com/ustctp/p/9046868.html
Copyright © 2011-2022 走看看