How to detect whether any intervals overlap in an array of start and end times with Pascal

1 Answer

0 votes
program IntervalOverlap;

type
  Interval = record
    startTime: Integer;
    endTime: Integer;
  end;

var
  intervals: array of Interval;

// Comparison function for sorting intervals by start time
function CompareIntervals(const a, b: Interval): Integer;
begin
  if a.startTime < b.startTime then
    CompareIntervals := -1
  else if a.startTime > b.startTime then
    CompareIntervals := 1
  else
    CompareIntervals := 0;
end;

// Simple bubble sort (Pascal does not have std::sort)
procedure SortIntervals(var arr: array of Interval);
var
  i, j: Integer;
  temp: Interval;
begin
  for i := 0 to High(arr) - 1 do
    for j := 0 to High(arr) - i - 1 do
      if CompareIntervals(arr[j], arr[j+1]) > 0 then
      begin
        temp := arr[j];
        arr[j] := arr[j+1];
        arr[j+1] := temp;
      end;
end;

function HasOverlap(var arr: array of Interval): Boolean;
var
  i: Integer;
begin
  if Length(arr) = 0 then
  begin
    HasOverlap := True;
    Exit;
  end;

  // Sorting is essential because once intervals are ordered by 
  // start time, any overlap can only occur between adjacent intervals.
  SortIntervals(arr);
  // (5,9), (11,12), (15,17)

  // (5,9) and (11,12) → 11 < 9? No
  // (11,12) and (15,17) → 15 < 12? No

  // The loop compares each interval with the one before it.
  for i := 1 to High(arr) do
  begin
    if arr[i].startTime < arr[i-1].endTime then
    begin
      HasOverlap := False; // Overlap found
      Exit;
    end;
  end;

  HasOverlap := True; // No overlap
end;

var
  result: Boolean;

begin
  SetLength(intervals, 3);
  intervals[0].startTime := 11; intervals[0].endTime := 12;
  intervals[1].startTime := 5;  intervals[1].endTime := 9;
  intervals[2].startTime := 15; intervals[2].endTime := 17;

  result := HasOverlap(intervals);

  if result then
    writeln('There are NO overlapping intervals')
  else
    writeln('There ARE overlapping intervals');
end.



(*
run:

There are NO overlapping intervals

*)

 



answered Apr 8 by avibootz

Related questions

...