How to find the length of the longest consecutive sequence of an unsorted vector of integers in Pascal

1 Answer

0 votes
program LongestConsecutiveSequence;

const
  MAX_SIZE = 1024;

type
  IntArray = array[1..MAX_SIZE] of Integer;

var
  nums: IntArray;
  numCount: Integer;

function Contains(setArr: IntArray; setSize, value: Integer): Boolean;
var
  i: Integer;
begin
  for i := 1 to setSize do
    if setArr[i] = value then
    begin
      Contains := True;
      Exit;
    end;
  Contains := False;
end;

procedure Insert(var setArr: IntArray; var setSize: Integer; value: Integer);
begin
  if not Contains(setArr, setSize, value) then
  begin
    Inc(setSize);
    setArr[setSize] := value;
  end;
end;

function LongestConsecutive(nums: IntArray; length: Integer): Integer;
var
  setArr: IntArray;
  setSize: Integer;
  i, num, currentNum, currentStreak, longestStreak: Integer;
begin
  setSize := 0;
  for i := 1 to length do
    Insert(setArr, setSize, nums[i]);

  longestStreak := 0;

  for i := 1 to setSize do
  begin
    num := setArr[i];
    if not Contains(setArr, setSize, num - 1) then
    begin
      currentNum := num;
      currentStreak := 1;

      while Contains(setArr, setSize, currentNum + 1) do
      begin
        Inc(currentNum);
        Inc(currentStreak);
      end;

      if currentStreak > longestStreak then
        longestStreak := currentStreak;
    end;
  end;

  LongestConsecutive := longestStreak;
end;

var
  result: Integer;
begin
  // Initialize input array
  numCount := 6;
  
  nums[1] := 680;
  nums[2] := 4;
  nums[3] := 590;
  nums[4] := 3;
  nums[5] := 2;
  nums[6] := 1;

  result := LongestConsecutive(nums, numCount);
  WriteLn('Length of the longest consecutive sequence: ', result);
end.



(*
run:

Length of the longest consecutive sequence: 4

*)

 



answered Aug 18 by avibootz
...