Skip to content

Commit

Permalink
add solution for #986 Interval List Intersections.
Browse files Browse the repository at this point in the history
  • Loading branch information
ecgan committed May 23, 2020
1 parent 6b69596 commit d619b99
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 0 deletions.
39 changes: 39 additions & 0 deletions problems/interval-list-intersections/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Interval List Intersections

LeetCode #: [986](https://leetcode.com/problems/interval-list-intersections/)

Difficulty: Medium

Topics: Two Pointers.

## Problem

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:

```text
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.

## Complexity Analysis

Assume m is the length of array A and n is the length of array B.

Time complexity: O(m+n)

Space complexity: O(1) (excluding the result output array)
29 changes: 29 additions & 0 deletions problems/interval-list-intersections/intervalIntersection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* @param {number[][]} A
* @param {number[][]} B
* @return {number[][]}
*/
const intervalIntersection = function (A, B) {
const result = []
let i = 0
let j = 0

while (i < A.length && j < B.length) {
const lo = Math.max(A[i][0], B[j][0])
const hi = Math.min(A[i][1], B[j][1])

if (lo <= hi) {
result.push([lo, hi])
}

if (A[i][1] < B[j][1]) {
i++
} else {
j++
}
}

return result
}

module.exports = intervalIntersection
12 changes: 12 additions & 0 deletions problems/interval-list-intersections/intervalIntersection.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const intervalIntersection = require('./intervalIntersection')

test('Example 1', () => {
const A = [[0, 2], [5, 10], [13, 23], [24, 25]]
const B = [[1, 5], [8, 12], [15, 24], [25, 26]]

const result = intervalIntersection(A, B)

expect(result).toStrictEqual([
[1, 2], [5, 5], [8, 10], [15, 23], [24, 24], [25, 25]
])
})

0 comments on commit d619b99

Please sign in to comment.