Menu
CoddyTech

Stock Span Problem

Otrzymujesz cenę zamknięcia akcji każdego dnia: prices[i] to cena w dniu i. Rozpiętość dla dnia i to liczba kolejnych dni, kończących się w dniu i i obejmujących go, w których cena była mniejsza lub równa prices[i].

Zwróć rozpiętość dla każdego dnia, w tej samej kolejności co w prices. Każda rozpiętość wynosi co najmniej 1, ponieważ dany dzień zawsze liczy się sam.

Funkcja

stockSpan(prices: integer-array) → integer-array
pricesinteger-array
cena każdego dnia, w kolejności
Zwracainteger-array
zakres każdego dnia, w tej samej kolejności

Ograniczenia

  • 1 ≤ prices.length ≤ 104
  • 1 ≤ prices[i] ≤ 105
  • Wcześniejszy dzień z tą samą ceną wlicza się do okresu; zatrzymuje go dopiero cena ściśle wyższa.

Przykłady

Wejście
prices = [31, 27, 14, 21, 30, 18, 40]
Wyjście
[1, 1, 1, 2, 4, 1, 7]
Wyjaśnienie
Dzień 3. przy wartości 21 cofa się o 14 i zatrzymuje na 27: rozpiętość 2. Dzień 4. przy wartości 30 zatrzymuje się na 31: rozpiętość 4. Dzień 6. przy wartości 40 przewyższa wszystkie wcześniejsze ceny i obejmuje wszystkie 7 dni.
challenge icon

Pytanie dodatkowe

Ceny napływają teraz pojedynczo i musisz podawać każdy zakres, gdy tylko pojawi się jego cena. Które podejście nadal działa i co zachowuje między wywołaniami?

Zresetuj kod
def stockSpan(prices):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argument

prices = [31, 27, 14, 21, 30, 18, 40]

Oczekiwany wynik

[1, 1, 1, 2, 4, 1, 7]