FastPrepSubtract One Half-Open Interval from Another

Subtract One Half-Open Interval from Another

Google logoGoogle● EasyINTERNONSITE INTERVIEW
Learn

Problem statement

You are given two finite floating-point intervals intervalA and intervalB. Each array contains exactly [start, end] and represents the half-open interval [start, end).

Return the portions of intervalA that are not covered by intervalB.

  • If the intervals do not overlap, return intervalA.
  • If intervalB completely covers intervalA, return an empty matrix.
  • Otherwise, return each non-empty residual interval from left to right.
  • Intervals that only touch at an endpoint do not overlap. Never return an empty interval such as [x, x).

Function

subtractInterval(intervalA: double[], intervalB: double[]) → double[][]

Examples

Example 1

intervalA = [2.5,7.5]intervalB = [4.3,9.3]return = [[2.5,4.3]]

The overlap is [4.3, 7.5), so the only part of intervalA left uncovered is [2.5, 4.3).

Example 2

intervalA = [1.0,10.0]intervalB = [3.0,7.0]return = [[1.0,3.0],[7.0,10.0]]

intervalB lies strictly inside intervalA, leaving one residual interval on each side. They are returned from left to right.

Example 3

intervalA = [1.0,3.0]intervalB = [3.0,5.0]return = [[1.0,3.0]]

The intervals only touch at endpoint 3.0. Because they are half-open, they do not overlap, so intervalA remains unchanged.

Example 4

intervalA = [2.0,6.0]intervalB = [0.0,10.0]return = []

intervalB covers every point in intervalA, so no residual interval remains.

Constraints

  • intervalA.length == 2 and intervalB.length == 2.
  • Every endpoint is a finite double value.
  • intervalA[0] < intervalA[1].
  • intervalB[0] < intervalB[1].

More Google problems

See Google hiring insights
public double[][] subtractInterval(double[] intervalA, double[] intervalB) {
  // Write your code here.
}
intervalA[2.5,7.5]
intervalB[4.3,9.3]
expected[[2.5,4.3]]
Checking account…