How to add a new interval into a sorted array of non‑overlapping intervals in Swift

1 Answer

0 votes
import Foundation

func insertInterval(_ intervals: [[Int]], _ newInterval: [Int]) -> [[Int]] {
    var result: [[Int]] = []
    var i = 0
    let n = intervals.count
    var current = newInterval

    // 1. Add all intervals that end BEFORE the new interval starts.
    // These cannot overlap.
    while i < n && intervals[i][1] < current[0] {
        result.append(intervals[i])
        i += 1
    }

    // 2. Merge all intervals that DO overlap with the new interval.
    // Overlap condition: intervals[i].start <= newInterval.end
    while i < n && intervals[i][0] <= current[1] {
        current[0] = min(current[0], intervals[i][0])
        current[1] = max(current[1], intervals[i][1])
        i += 1
    }

    // Add the merged interval
    result.append(current)

    // 3. Add all remaining intervals (those starting AFTER new interval ends)
    while i < n {
        result.append(intervals[i])
        i += 1
    }

    return result
}

// Usage:
let intervals = [
    [1, 3],
    [6, 8],
    [13, 18]
]

let newInterval1 = [9, 11]
var updated = insertInterval(intervals, newInterval1)

let newInterval2 = [2, 5]
updated = insertInterval(updated, newInterval2)

print("Updated intervals:")
for iv in updated {
    print("[\(iv[0]),\(iv[1])]", terminator: " ")
}


/*
run:

Updated intervals:
[1,5] [6,8] [9,11] [13,18]

*/

 



answered Apr 9 by avibootz

Related questions

...