Subtract One Half-Open Interval from Another
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
intervalBcompletely coversintervalA, 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 == 2andintervalB.length == 2.- Every endpoint is a finite
doublevalue. intervalA[0] < intervalA[1].intervalB[0] < intervalB[1].