1
1
arr = [- 10 , - 5 , 0 , 5 , 5.1 , 11 , 13 , 21 , 3 , 4 , - 21 , - 10 , - 5 , - 1 , 0 ]
2
+ expect = [- 5 , 0 , 5 , 5.1 , 11 , 13 , 21 , - 1 , 4 , - 1 , - 10 , - 5 , - 1 , 0 , - 1 ]
2
3
3
- def next_greatest_element_slow (arr ):
4
+
5
+ def next_greatest_element_slow (arr : list ) -> list :
4
6
"""
5
- Function to get Next Greatest Element (NGE) pair for all elements of list
6
- Maximum element present afterwards the current one which is also greater than current one
7
- >>> next_greatest_element_slow(arr)
8
- [-5, 0, 5, 5.1, 11, 13, 21, -1, 4, -1, -10, -5, -1, 0, -1]
7
+ Get the Next Greatest Element (NGE) for all elements in a list.
8
+ Maximum element present after the current one which is also greater than the
9
+ current one.
10
+ >>> next_greatest_element_slow(arr) == expect
11
+ True
9
12
"""
10
13
result = []
11
14
for i in range (0 , len (arr ), 1 ):
@@ -18,39 +21,40 @@ def next_greatest_element_slow(arr):
18
21
return result
19
22
20
23
21
- def next_greatest_element_fast (arr ) :
24
+ def next_greatest_element_fast (arr : list ) -> list :
22
25
"""
23
26
Like next_greatest_element_slow() but changes the loops to use
24
27
enumerate() instead of range(len()) for the outer loop and
25
28
for in a slice of arr for the inner loop.
26
- >>> next_greatest_element_fast(arr)
27
- [-5, 0, 5, 5.1, 11, 13, 21, -1, 4, -1, -10, -5, -1, 0, -1]
29
+ >>> next_greatest_element_fast(arr) == expect
30
+ True
28
31
"""
29
32
result = []
30
33
for i , outer in enumerate (arr ):
31
34
next = - 1
32
- for inner in arr [i + 1 :]:
35
+ for inner in arr [i + 1 :]:
33
36
if outer < inner :
34
37
next = inner
35
38
break
36
39
result .append (next )
37
40
return result
38
41
39
42
40
- def next_greatest_element (arr ) :
43
+ def next_greatest_element (arr : list ) -> list :
41
44
"""
42
- Function to get Next Greatest Element (NGE) pair for all elements of list
43
- Maximum element present afterwards the current one which is also greater than current one
44
-
45
- Naive way to solve this is to take two loops and check for the next bigger number but that will make the
46
- time complexity as O(n^2). The better way to solve this would be to use a stack to keep track of maximum
47
- number givig a linear time complex solution.
48
-
49
- >>> next_greatest_element(arr)
50
- [-5, 0, 5, 5.1, 11, 13, 21, -1, 4, -1, -10, -5, -1, 0, -1]
45
+ Get the Next Greatest Element (NGE) for all elements in a list.
46
+ Maximum element present after the current one which is also greater than the
47
+ current one.
48
+
49
+ A naive way to solve this is to take two loops and check for the next bigger
50
+ number but that will make the time complexity as O(n^2). The better way to solve
51
+ this would be to use a stack to keep track of maximum number giving a linear time
52
+ solution.
53
+ >>> next_greatest_element(arr) == expect
54
+ True
51
55
"""
52
- stack = []
53
- result = [- 1 ]* len (arr )
56
+ stack = []
57
+ result = [- 1 ] * len (arr )
54
58
55
59
for index in reversed (range (len (arr ))):
56
60
if len (stack ):
@@ -63,7 +67,7 @@ def next_greatest_element(arr):
63
67
result [index ] = stack [- 1 ]
64
68
65
69
stack .append (arr [index ])
66
-
70
+
67
71
return result
68
72
69
73
@@ -76,11 +80,19 @@ def next_greatest_element(arr):
76
80
print (next_greatest_element_fast (arr ))
77
81
print (next_greatest_element (arr ))
78
82
79
- setup = ("from __main__ import arr, next_greatest_element_slow, "
80
- "next_greatest_element_fast, next_greatest_element" )
81
- print ("next_greatest_element_slow():" ,
82
- timeit ("next_greatest_element_slow(arr)" , setup = setup ))
83
- print ("next_greatest_element_fast():" ,
84
- timeit ("next_greatest_element_fast(arr)" , setup = setup ))
85
- print (" next_greatest_element():" ,
86
- timeit ("next_greatest_element(arr)" , setup = setup ))
83
+ setup = (
84
+ "from __main__ import arr, next_greatest_element_slow, "
85
+ "next_greatest_element_fast, next_greatest_element"
86
+ )
87
+ print (
88
+ "next_greatest_element_slow():" ,
89
+ timeit ("next_greatest_element_slow(arr)" , setup = setup ),
90
+ )
91
+ print (
92
+ "next_greatest_element_fast():" ,
93
+ timeit ("next_greatest_element_fast(arr)" , setup = setup ),
94
+ )
95
+ print (
96
+ " next_greatest_element():" ,
97
+ timeit ("next_greatest_element(arr)" , setup = setup ),
98
+ )
0 commit comments