Fixing stock_span_problem.py (#10540)

* Adding doctests in simpson_rule.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update stock_span_problem.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update subset_generation.py

* Update subset_generation.py

* Update data_structures/stacks/stock_span_problem.py

Co-authored-by: Christian Clauss <cclauss@me.com>

* Update stock_span_problem.py

* Update data_structures/stacks/stock_span_problem.py

Co-authored-by: Christian Clauss <cclauss@me.com>

* Update stock_span_problem.py

* Update stock_span_problem.py

* updating DIRECTORY.md

* Update stock_span_problem.py

* Update stock_span_problem.py

* Update stock_span_problem.py

* Update stock_span_problem.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
Co-authored-by: Maxim Smolskiy <mithridatus@mail.ru>
Co-authored-by: MaximSmolskiy <MaximSmolskiy@users.noreply.github.com>
This commit is contained in:
Aasheesh
2025-08-30 04:47:31 +05:30
committed by GitHub
parent 4394fd93d3
commit 5c50572476
2 changed files with 29 additions and 6 deletions

View File

@@ -725,6 +725,7 @@
* [Secant Method](maths/numerical_analysis/secant_method.py)
* [Simpson Rule](maths/numerical_analysis/simpson_rule.py)
* [Square Root](maths/numerical_analysis/square_root.py)
* [Weierstrass Method](maths/numerical_analysis/weierstrass_method.py)
* [Odd Sieve](maths/odd_sieve.py)
* [Perfect Cube](maths/perfect_cube.py)
* [Perfect Number](maths/perfect_number.py)

View File

@@ -8,8 +8,29 @@ on the current day is less than or equal to its price on the given day.
"""
def calculation_span(price, s):
def calculate_span(price: list[int]) -> list[int]:
"""
Calculate the span values for a given list of stock prices.
Args:
price: List of stock prices.
Returns:
List of span values.
>>> calculate_span([10, 4, 5, 90, 120, 80])
[1, 1, 2, 4, 5, 1]
>>> calculate_span([100, 50, 60, 70, 80, 90])
[1, 1, 2, 3, 4, 5]
>>> calculate_span([5, 4, 3, 2, 1])
[1, 1, 1, 1, 1]
>>> calculate_span([1, 2, 3, 4, 5])
[1, 2, 3, 4, 5]
>>> calculate_span([10, 20, 30, 40, 50])
[1, 2, 3, 4, 5]
>>> calculate_span([100, 80, 60, 70, 60, 75, 85])
[1, 1, 1, 2, 1, 4, 6]
"""
n = len(price)
s = [0] * n
# Create a stack and push index of fist element to it
st = []
st.append(0)
@@ -21,18 +42,20 @@ def calculation_span(price, s):
for i in range(1, n):
# Pop elements from stack while stack is not
# empty and top of stack is smaller than price[i]
while len(st) > 0 and price[st[0]] <= price[i]:
while len(st) > 0 and price[st[-1]] <= price[i]:
st.pop()
# If stack becomes empty, then price[i] is greater
# than all elements on left of it, i.e. price[0],
# price[1], ..price[i-1]. Else the price[i] is
# greater than elements after top of stack
s[i] = i + 1 if len(st) <= 0 else (i - st[0])
s[i] = i + 1 if len(st) <= 0 else (i - st[-1])
# Push this element to stack
st.append(i)
return s
# A utility function to print elements of array
def print_array(arr, n):
@@ -42,10 +65,9 @@ def print_array(arr, n):
# Driver program to test above function
price = [10, 4, 5, 90, 120, 80]
S = [0 for i in range(len(price) + 1)]
# Fill the span values in array S[]
calculation_span(price, S)
# Calculate the span values
S = calculate_span(price)
# Print the calculated span values
print_array(S, len(price))