Interval List Intersections

You are given two lists of closed intervals, firstList and secondList, where firstList[i] = [starti, endi] and secondList[j] = [startj, endj]. Each list of intervals is pairwise disjoint and in sorted order.
Return the intersection of these two interval lists.
closed interval [a, b] (with a < b) denotes the set of real numbers x with a <= x <= b.
Example 1:
Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]]
Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]

Approach

Java


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

public class IntervalListIntersections {
    public static void main(String[] args) {
        int[][] firstList = { { 02 }, { 510 }, { 1323 }, { 2425 } };
        int[][] secondList = { { 15 }, { 812 }, { 1524 }, { 2526 } };
        int[][] inter = intervalIntersection(firstList, secondList);
        System.out.println(Arrays.deepToString(inter));
    }

    static public int[][] intervalIntersection(int[][] Aint[][] B) {
        int n = A.length, m = B.length;
        int i = 0, j = 0;
        List<int[]> res = new ArrayList<int[]>();
        while (i < n && j < m) {
            int low = Math.max(A[i][0], B[j][0]);
            int high = Math.min(A[i][1], B[j][1]);
            if (low <= high) {
                res.add(new int[] { low, high });
            }
            if (A[i][1] < B[j][1])
                i++;
            else
                j++;
        }
        return res.toArray(new int[0][2]);
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> intervalIntersection(vector<vector<int>> &A
            vector<vector<int>> &B)
{
    int n = A.size(), m = B.size();
    int i = 0j = 0;
    vector<vector<int>> res;
    while (i < n && j < m)
    {
        int low = max(A[i][0]B[j][0]);
        int high = min(A[i][1]B[j][1]);
        if (low <= high)
            res.push_back({lowhigh});
        if (A[i][1] < B[j][1])
            i++;
        else
            j++;
    }
    return res;
}

int main()
{
    vector<vector<int>> firstList = {{02}, {510}, {1323}, {2425}};
    vector<vector<int>> secondList = {{15}, {812}, {1524}, {2526}};
    vector<vector<int>> inter = intervalIntersection(firstListsecondList);
    cout << "[";
    for (int i = 0i < inter.size(); i++)
    {
        cout << "[";
        for (int j = 0j < inter[i].size(); j++)
        {
            cout << inter[i][j];
            if (j != inter[i].size() - 1)
                cout << ",";
        }
        cout << "]";
        if (i != inter.size() - 1)
            cout << ",";
    }
    cout << "]";
    return 0;
}


No comments:

Post a Comment