How to add a new interval into a sorted list of non‑overlapping intervals in VB.NET

1 Answer

0 votes
Imports System
Imports System.Collections.Generic

Module InsertIntervalProgram

    Function InsertInterval(intervals As List(Of Integer()), newInterval As Integer()) As List(Of Integer())
        Dim result As New List(Of Integer())()
        Dim i As Integer = 0
        Dim n As Integer = intervals.Count

        ' 1. Add all intervals that end BEFORE the new interval starts.
        ' These cannot overlap.
        While i < n AndAlso intervals(i)(1) < newInterval(0)
            result.Add(intervals(i))
            i += 1
        End While

        ' 2. Merge all intervals that DO overlap with the new interval.
        ' Overlap condition: intervals(i).start <= newInterval.end
        While i < n AndAlso intervals(i)(0) <= newInterval(1)
            newInterval(0) = Math.Min(newInterval(0), intervals(i)(0))
            newInterval(1) = Math.Max(newInterval(1), intervals(i)(1))
            i += 1
        End While

        ' Add the merged interval
        result.Add(newInterval)

        ' 3. Add all remaining intervals (those starting AFTER new interval ends)
        While i < n
            result.Add(intervals(i))
            i += 1
        End While

        Return result
    End Function

    Sub Main()
        Dim intervals As New List(Of Integer()) From {
            New Integer() {1, 3},
            New Integer() {6, 8},
            New Integer() {13, 18}
        }

        Dim newInterval1 As Integer() = {9, 11}
        Dim updated = InsertInterval(intervals, newInterval1)

        Dim newInterval2 As Integer() = {2, 5}
        updated = InsertInterval(updated, newInterval2)

        Console.WriteLine("Updated intervals:")
        For Each iv In updated
            Console.Write("[" & iv(0) & "," & iv(1) & "] ")
        Next
        Console.WriteLine()
    End Sub

End Module


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

 



answered Apr 9 by avibootz

Related questions

...