Imports System
Imports System.Collections.Generic
Imports System.Linq
Module Module1
Public Structure Range
Public StartVal As Integer
Public EndVal As Integer
Public Sub New(s As Integer, e As Integer)
StartVal = s
EndVal = e
End Sub
End Structure
Function MergeRanges(ranges As List(Of Range)) As List(Of Range)
' Sort by StartVal
Dim sorted = ranges.OrderBy(Function(r) r.StartVal).ToList()
Dim merged As New List(Of Range)()
For Each r In sorted
If merged.Count = 0 OrElse r.StartVal > merged.Last().EndVal Then
merged.Add(New Range(r.StartVal, r.EndVal))
Else
Dim last = merged(merged.Count - 1)
last.EndVal = Math.Max(last.EndVal, r.EndVal)
merged(merged.Count - 1) = last
End If
Next
Return merged
End Function
Sub Main()
Dim ranges As New List(Of Range) From {
New Range(302, 447),
New Range(488, 489),
New Range(121, 234),
New Range(200, 421),
New Range(140, 354)
}
Dim result = MergeRanges(ranges)
For Each r In result
Console.WriteLine("(" & r.StartVal & ", " & r.EndVal & ")")
Next
End Sub
End Module
' run:
'
' (121, 447)
' (488, 489)
'