FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
algorithms/algorithms/queues/max_sliding_window.py at master · ennc0d3/algorithms · GitHub
ennc0d3
/
algorithms
Public
forked from
keon/algorithms
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
algorithms
/
algorithms
/
queues
/
max_sliding_window.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
34 lines (28 loc) · 1016 Bytes
Breadcrumbs
algorithms
/
algorithms
/
queues
/
max_sliding_window.py
Copy path
File metadata and controls
34 lines (28 loc) · 1016 Bytes
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"""
Given an array and a number k
Find the max elements of each of its sub-arrays of length k.
Keep indexes of good candidates in deque d.
The indexes in d are from the current window, they're increasing,
and their corresponding nums are decreasing.
Then the first deque element is the index of the largest window value.
For each index i:
1. Pop (from the end) indexes of smaller elements (they'll be useless).
2. Append the current index.
3. Pop (from the front) the index i - k, if it's still in the deque
(it falls out of the window).
4. If our window has reached size k,
append the current window maximum to the output.
"""
import
collections
def
max_sliding_window
(
arr
,
k
):
qi
=
collections
.
deque
()
# queue storing indexes of elements
result
=
[]
for
i
,
n
in
enumerate
(
arr
):
while
qi
and
arr
[
qi
[
-
1
]]
<
n
:
qi
.
pop
()
qi
.
append
(
i
)
if
qi
[
0
]
==
i
-
k
:
qi
.
popleft
()
if
i
>=
k
-
1
:
result
.
append
(
arr
[
qi
[
0
]])
return
result
Back
|
FazBrowse Home
|
New Git URL