1. 概述

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

思路:排序,然后循环判断与前个元素是否可以合并。

2. 解题

  1. <?php
  2. class Solution {
  3. /**
  4. * @param Integer[][] $intervals
  5. * @return Integer[][]
  6. */
  7. public function merge($intervals) {
  8. $intervals = $this->arrayMultiSort($intervals);
  9. for ($i = 1; $i <= count($intervals); $i++) {
  10. $pre = $intervals[$i - 1];
  11. $my = &$intervals[$i];
  12. if ($pre[1] < $my[0]) {
  13. continue;
  14. }
  15. if ($pre[1] >= $my[1]) {
  16. unset($intervals[$i]);
  17. continue;
  18. }
  19. $my[0] = $pre[0];
  20. unset($intervals[$i - 1]);
  21. }
  22. return $intervals;
  23. }
  24. public function arrayMultiSort($intervals) {
  25. $array1 = [];
  26. foreach ($intervals as $k => $v) {
  27. $array1[] = $v[0];
  28. }
  29. array_multisort($array1, SORT_ASC, $intervals);
  30. return $intervals;
  31. }
  32. }
  33. $intervals = [[8,10],[1,3],[2,6],[15,18]];
  34. $cls = new Solution();
  35. $r = $cls->merge($intervals);
  36. print_r($r);