|
9 | 9 |
|
10 | 10 |
|
11 | 11 | def calculation_span(price, s): |
| 12 | + """ |
| 13 | + Calculate the span values for a given list of stock prices. |
| 14 | + Args: |
| 15 | + price (list): List of stock prices. |
| 16 | + s (list): List to store the span values. |
| 17 | + Returns: |
| 18 | + None |
| 19 | + >>> price = [10, 4, 5, 90, 120, 80] |
| 20 | + >>> S = [0 for i in range(len(price) + 1)] |
| 21 | + >>> calculation_span(price, S) |
| 22 | + >>> S |
| 23 | + [1, 1, 2, 4, 5, 6, 0] |
| 24 | + >>> price = [100, 50, 60, 70, 80, 90] |
| 25 | + >>> S = [0 for i in range(len(price) + 1)] |
| 26 | + >>> calculation_span(price, S) |
| 27 | + >>> S |
| 28 | + [1, 1, 2, 3, 4, 5, 0] |
| 29 | + >>> price = [5, 4, 3, 2, 1] |
| 30 | + >>> S = [0 for i in range(len(price) + 1)] |
| 31 | + >>> calculation_span(price, S) |
| 32 | + >>> S |
| 33 | + [1, 1, 2, 3, 4, 0] |
| 34 | + >>> price = [1, 2, 3, 4, 5] |
| 35 | + >>> S = [0 for i in range(len(price) + 1)] |
| 36 | + >>> calculation_span(price, S) |
| 37 | + >>> S |
| 38 | + [1, 2, 3, 4, 5, 0] |
| 39 | + >>> price = [10, 20, 30, 40, 50] |
| 40 | + >>> S = [0 for i in range(len(price) + 1)] |
| 41 | + >>> calculation_span(price, S) |
| 42 | + >>> S |
| 43 | + [1, 2, 3, 4, 5, 0] |
| 44 | + """ |
12 | 45 | n = len(price) |
13 | | - # Create a stack and push index of fist element to it |
14 | 46 | st = [] |
15 | 47 | st.append(0) |
16 | | - |
17 | | - # Span value of first element is always 1 |
18 | 48 | s[0] = 1 |
19 | | - |
20 | | - # Calculate span values for rest of the elements |
21 | 49 | for i in range(1, n): |
22 | | - # Pop elements from stack while stack is not |
23 | | - # empty and top of stack is smaller than price[i] |
24 | 50 | while len(st) > 0 and price[st[0]] <= price[i]: |
25 | 51 | st.pop() |
26 | | - |
27 | | - # If stack becomes empty, then price[i] is greater |
28 | | - # than all elements on left of it, i.e. price[0], |
29 | | - # price[1], ..price[i-1]. Else the price[i] is |
30 | | - # greater than elements after top of stack |
31 | 52 | s[i] = i + 1 if len(st) <= 0 else (i - st[0]) |
32 | 53 |
|
33 | | - # Push this element to stack |
34 | | - st.append(i) |
35 | 54 |
|
36 | | - |
37 | | -# A utility function to print elements of array |
38 | 55 | def print_array(arr, n): |
39 | 56 | for i in range(n): |
40 | 57 | print(arr[i], end=" ") |
41 | 58 |
|
42 | 59 |
|
43 | | -# Driver program to test above function |
44 | 60 | price = [10, 4, 5, 90, 120, 80] |
45 | 61 | S = [0 for i in range(len(price) + 1)] |
46 | 62 |
|
47 | | -# Fill the span values in array S[] |
48 | 63 | calculation_span(price, S) |
49 | 64 |
|
50 | | -# Print the calculated span values |
51 | 65 | print_array(S, len(price)) |
| 66 | + |
| 67 | +if __name__ == "__main__": |
| 68 | + import doctest |
| 69 | + |
| 70 | + doctest.testmod() |
0 commit comments