解题思路:先要考虑两个集合存在交集的情况。通过分析,可以知道当a.s >= b.s时,交集为[a.s, min(a.e, b.e) ],
同理当b.s >= a.s时,交集为[b.s, min(a.e, b.e)]。
public Interval[] intervalIntersection(Interval[] A, Interval[] B)
{
ArrayList<Interval> arrayList = new ArrayList<>();
Interval interval = null;
int i = 0, j = 0, k = 0;
while (i < A.length && j < B.length)
{
if ( A[i].start > B[j].end ) // 不存在交集
j++;
else if ( B[j].start > A[i].end) // 不存在交集
i++;
else if (B[j].start >= A[i].start ) // 存在交集
{
interval = new Interval(B[j].start, Math.min(A[i].end, B[j].end));
arrayList.add(interval);
if (A[i].end <= B[j].end)
i++;
else
j++;
}
else if (B[j].start <= A[i].start) // 存在交集
{
interval = new Interval(A[i].start, Math.min(A[i].end, B[j].end));
arrayList.add(interval);
if (A[i].end <= B[j].end)
i++;
else
j++;
}
}
return arrayList.toArray(new Interval[arrayList.size()]);
}