986.区间列表的交集 - Java 双指针

Smile_slime_47

原题地址:https://leetcode.cn/problems/interval-list-intersections/

题解

每次用area1和area2两个指针维护当前区间,若area1和area2有交集,则有

  • 交集左边界必然是area1和area2中较大的左边界
  • 交集右边界必然是area1和area2中较小的右边界

故用left和right保存下两个值

  • 当left<=right时,area1和area2存在交集,将left和right存入temp数组并存入list中
  • 不论两个区间是否存在交集,此时都需要推进迭代,area1和area2中必然是右边界较大的那个区间需要保留,则右边界较小的区间被舍弃,指针++

时间复杂度:O(M+N)

空间复杂度:O(M+N)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int[][] intervalIntersection(int[][] firstList, int[][] secondList) {
List<int[]> list=new ArrayList<>();
int[] temp;
int area1=0,area2=0,left,right;
while(area1<firstList.length&&area2<secondList.length){
temp=new int[2];
left=Math.max(firstList[area1][0],secondList[area2][0]);
right=Math.min(firstList[area1][1],secondList[area2][1]);
if(right>=left){
temp[0]=left;
temp[1]=right;
list.add(temp);
}
if(firstList[area1][1]>secondList[area2][1])area2++;
else area1++;
}
return list.toArray(new int[list.size()][]);
}
}
Comments
On this page
986.区间列表的交集 - Java 双指针