package com.fishercoder.solutions;

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

/**
 * 986. Interval List Intersections
 *
 * Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order.
 * Return the intersection of these two interval lists.
 *
 * (Formally, a closed interval [a, b] (with a <= b) denotes the set of real numbers x with a <= x <= b.
 * The intersection of two closed intervals is a set of real numbers that is either empty, or can be represented as a closed interval.
 * For example, the intersection of [1, 3] and [2, 4] is [2, 3].)
 *
 * Example 1:
 * Input: A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
 * Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
 * Reminder: The inputs and the desired output are lists of Interval objects, and not arrays or lists.
 *
 * Note:
 * 0 <= A.length < 1000
 * 0 <= B.length < 1000
 * 0 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9
 * NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
 * */
public class _986 {
    public static class Solution1 {
        public int[][] intervalIntersection(int[][] A, int[][] B) {
            int i = 0;
            int j = 0;
            List<int[]> list = new ArrayList<>();
            while (i < A.length && j < B.length) {
                int start = Math.max(A[i][0], B[j][0]);
                int end = Math.min(A[i][1], B[j][1]);
                if (start <= end) {
                    list.add(new int[]{start, end});
                }
                if (end == A[i][1]) {
                    i++;
                } else {
                    j++;
                }
            }
            int[][] result = new int[list.size()][2];
            for (int k = 0; k < list.size(); k++) {
                result[k] = list.get(k);
            }
            return result;
        }
    }
}

@@ -85,1029 +85,8 @@
 t;%0A%0A
-/**%0A * 986. Interval List Intersections%0A *%0A * Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order.%0A * Return the intersection of these two interval lists.%0A *%0A * (Formally, a closed interval %5Ba, b%5D (with a %3C= b) denotes the set of real numbers x with a %3C= x %3C= b.%0A * The intersection of two closed intervals is a set of real numbers that is either empty, or can be represented as a closed interval.%0A * For example, the intersection of %5B1, 3%5D and %5B2, 4%5D is %5B2, 3%5D.)%0A *%0A * Example 1:%0A * Input: A = %5B%5B0,2%5D,%5B5,10%5D,%5B13,23%5D,%5B24,25%5D%5D, B = %5B%5B1,5%5D,%5B8,12%5D,%5B15,24%5D,%5B25,26%5D%5D%0A * Output: %5B%5B1,2%5D,%5B5,5%5D,%5B8,10%5D,%5B15,23%5D,%5B24,24%5D,%5B25,25%5D%5D%0A * Reminder: The inputs and the desired output are lists of Interval objects, and not arrays or lists.%0A *%0A * Note:%0A * 0 %3C= A.length %3C 1000%0A * 0 %3C= B.length %3C 1000%0A * 0 %3C= A%5Bi%5D.start, A%5Bi%5D.end, B%5Bi%5D.start, B%5Bi%5D.end %3C 10%5E9%0A * NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.%0A * */%0A
 publ

refactor 986