Online Stock Span

MediumStackDesignMonotonic StackData Stream

Solution

export class StockSpanner {
  stack: [number, number][];
 
  constructor() {
    this.stack = [];
  }
 
  get top(): [number, number] {
    if (this.stack.length === 0) {
      return [0, 0];
    }
    return this.stack[this.stack.length - 1];
  }
 
  pop() {
    this.stack.pop();
  }
 
  push(price: number, prevDays: number) {
    this.stack.push([price, prevDays]);
  }
 
  next(price: number): number {
    let prevDays = 1;
    while (0 < this.stack.length && this.top[0] <= price) {
      prevDays += this.top[1];
      this.pop();
    }
    this.push(price, prevDays);
    return prevDays;
  }
}