How to get the number of days needed to wait after a day (a[i]) gets warmer given an array of temperatures in Pascal

1 Answer

0 votes
program WarmerDays;

{$mode objfpc}{$H+}

procedure PrintArray(const arr: array of Integer);
var
  i: Integer;
begin
  for i := 0 to High(arr) do
    Write(arr[i], ' ');
  WriteLn;
end;

procedure NumberOfDaysToWait(const temperatures: array of Integer;
                             out resultArr: array of Integer);
var
  size: Integer;
  stack: array of Integer;
  top: Integer;
  i, idx: Integer;
begin
  size := Length(temperatures);
  SetLength(stack, size);
  top := -1;

  for i := 0 to size - 1 do
  begin
    while (top >= 0) and (temperatures[i] > temperatures[stack[top]]) do
    begin
      idx := stack[top];
      Dec(top);
      resultArr[idx] := i - idx;
    end;

    Inc(top);
    stack[top] := i;
  end;

  while top >= 0 do
  begin
    resultArr[stack[top]] := 0;
    Dec(top);
  end;
end;

var
  temperatures: array of Integer;
  resultArr: array of Integer;
begin
  temperatures := [82, 84, 81, 58, 85, 89, 75, 71];
  SetLength(resultArr, Length(temperatures));
  
    // 82 -> 84 = 1
    // 84 -> 81 -> 58 -> 85 = 3
    // 81 -> 58 -> 85 = 2
    // 58 -> 85 = 1
    // 85 -> 89 = 1
    // 89 -> 75 -> 71 = 0
    // 75 -> 71 = 0

  NumberOfDaysToWait(temperatures, resultArr);

  PrintArray(resultArr);
end.




(*
run:

1 3 2 1 1 0 0 0

*)

 



answered 18 hours ago by avibootz

Related questions

...