986. 区间列表的交集

给定两个由一些 闭区间 组成的列表,firstList 和 secondList ,其中 firstList[i] = [starti, endi] 而 secondList[j] = [startj, endj] 。每个区间列表都是成对 不相交 的,并且 已经排序 。

返回这 两个区间列表的交集 。

形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b 。

两个闭区间的 交集 是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3] 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/interval-list-intersections
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[][] intervalIntersection(int[][] firstList, int[][] secondList) {
        if (firstList == null || firstList.length == 0 || secondList == null || secondList.length == 0) {
            return new int[0][0];
        }

        List<int[]> ans = new ArrayList<>();

        int p1 = 0, p2 = 0;

        while (p1 < firstList.length && p2 < secondList.length) {

            if (firstList[p1][0] <= secondList[p2][0] && firstList[p1][1] >= secondList[p2][0] ||
                    secondList[p2][0] <= firstList[p1][0] && secondList[p2][1] >= firstList[p1][0]) {
                ans.add(new int[]{Math.max(firstList[p1][0], secondList[p2][0]), Math.min(firstList[p1][1], secondList[p2][1])});
            }
            if (firstList[p1][1] == secondList[p2][1]) {
                p1++;
                p2++;
            } else if (firstList[p1][1] > secondList[p2][1]) {
                p2++;
            } else {
                p1++;
            }
        }


        return ans.toArray(new int[ans.size()][2]);
    }
}
posted @ 2022-01-11 18:32  Tianyiya  阅读(51)  评论(0)    收藏  举报