56. 合并区间

image.png

题解

执行耗时:9 ms,击败了23.07% 的Java用户 内存消耗:41.2 MB,击败了23.64% 的Java用户

  1. class Solution {
  2. public int[][] merge(int[][] intervals) {
  3. Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
  4. // 用于保存合并的结果
  5. List<int[]> merged = new ArrayList<>();
  6. for (int i = 0; i < intervals.length; i++) {
  7. int L = intervals[i][0], R = intervals[i][1];
  8. int size = merged.size();
  9. // 如果merge为空
  10. // 或者如果merge最后一个元素的右边小于当前数组的左边,说明与上一元素不重叠
  11. // 直接将当前数组添加到merged
  12. if (size == 0 || merged.get(size - 1)[1] < L) {
  13. merged.add(new int[] {L, R});
  14. } else {
  15. // 否则说明需要合并
  16. // 合并的方法是更新merged的最后一个元素的右边
  17. // 取当前数组的右边与merged的最后一个元素的右边中的大值
  18. merged.get(size - 1)[1] = Math.max(R, merged.get(size - 1)[1]);
  19. }
  20. }
  21. return merged.toArray(new int[merged.size()][2]);
  22. }
  23. }