区间合并

区间合并

问题

这个题目说的是,给你一个区间集合,你要把有重叠的区间合并起来。

比如说,给你的区间集合是:

[1, 8]
[2, 4]
[9, 10]
[10, 16]

这 4 个区间里,[1, 8] 区间包含了 [2, 4] 区间,于是它们合并后是 [1, 8]。

[9, 10] 区间和 [10, 16] 区间相邻,合并起来后是 [9, 16]。最后得到合并后的区间有两个:

[1, 8]
[9, 16]

代码

public class AlgoCasts {

  public class Interval {
    int start;
    int end;
    Interval() { start = 0; end = 0; }
    Interval(int s, int e) { start = s; end = e; }
  }

  // Time: O(n*log(n)), Space: O(1)
  public List<Interval> merge(List<Interval> intervals) {
    List<Interval> result = new ArrayList<>();
    intervals.sort((a, b) -> a.start - b.start);

    for (Interval in: intervals) {
      int n = result.size();
      if (result.isEmpty() || result.get(n-1).end < in.start) {
        result.add(in);
      } else {
        result.get(n-1).end = Math.max(result.get(n-1).end, in.end);
      }
    }
    return result;
  }

}

  转载请注明: ForwardXu 区间合并

 上一篇
反转单词 反转单词
反转单词问题 这个题目说的是,给你一个字符串,你要写一个函数反转这个字符串中的单词,然后返回处理后的字符串。注意,单词之间只用一个空格隔开。 比如说给你的字符串是: "I am busy." 反转这个字符串中的 3 个单词,得到: "
2018-12-09
下一篇 
有序数组中的单身数字 有序数组中的单身数字
有序数组中的单身数字问题 这个题目说的是,给你一个排好序的整数数组,里面的数字都出现两次,只有一个数字出现了一次,我们管它叫单身数字,你要写代码找到这个单身数字。 比如说给你的有序数组是: 1, 1, 2, 2, 4, 4, 6, 8,
2018-12-09
  目录