题目

类型:Array
image.png

解题思路

对于区间S1=[l1,r1]S2=[l2,r2],如果它们之间没有重叠,说明S1在S2左侧,此时r1<l2。或者S1在S2的右侧,此时l1>r2

二者均不满足则代表S1和S2有交集,交集为 max(l1,l2),min(r1,r2),并集为min(l1,l2),max(r1,r2)

image.png

代码

  1. class Solution {
  2. public int[][] insert(int[][] intervals, int[] newInterval) {
  3. int left = newInterval[0];
  4. int right = newInterval[1];
  5. boolean placed = false;
  6. List<int[]> ansList = new ArrayList<int[]>();
  7. for (int[] interval : intervals) {
  8. if (interval[0] > right) {
  9. // 在插入区间的右侧且无交集
  10. if (!placed) {
  11. ansList.add(new int[]{left, right});
  12. placed = true;
  13. }
  14. ansList.add(interval);
  15. } else if (interval[1] < left) {
  16. // 在插入区间的左侧且无交集
  17. ansList.add(interval);
  18. } else {
  19. // 与插入区间有交集,计算它们的并集
  20. left = Math.min(left, interval[0]);
  21. right = Math.max(right, interval[1]);
  22. }
  23. }
  24. if (!placed) {
  25. ansList.add(new int[]{left, right});
  26. }
  27. int[][] ans = new int[ansList.size()][2];
  28. for (int i = 0; i < ansList.size(); ++i) {
  29. ans[i] = ansList.get(i);
  30. }
  31. return ans;
  32. }
  33. }