Skip to content

Commit 370e495

Browse files
Merge pull request #1 from AdityaPatadiya/AdityaPatadiya-patch-1
feat: implement Monotonic Queue and sliding window maximum function w…
2 parents 03a4251 + 1209ace commit 370e495

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""
2+
A Monotonic Queue is a data structure that supports efficient insertion, deletion,
3+
and retrieval of elements in a specific order, typically in increasing or decreasing order.
4+
"""
5+
6+
from collections import deque
7+
8+
class MonotonicQueue:
9+
def __init__(self):
10+
self.deque = deque()
11+
12+
def push(self, value):
13+
while self.deque and self.deque[-1] < value:
14+
self.deque.pop()
15+
self.deque.append(value)
16+
17+
def max(self):
18+
return self.deque[0]
19+
20+
def pop(self, value):
21+
if self.deque and self.deque[0] == value:
22+
self.deque.popleft()
23+
24+
def sliding_window_max(nums, k):
25+
if not nums or k == 0:
26+
return []
27+
if k >= len(nums):
28+
return [max(nums)]
29+
if k == 1:
30+
return nums
31+
32+
q = MonotonicQueue()
33+
result = []
34+
for i in range(len(nums)):
35+
if i < k - 1:
36+
q.push(nums[i])
37+
else:
38+
q.push(nums[i])
39+
result.append(q.max())
40+
q.pop(nums[i - k + 1])
41+
return result
42+
43+
# Test cases
44+
print(sliding_window_max([], 3)) # Edge case: Empty list
45+
print(sliding_window_max([1, 2], 3)) # Edge case: k > len(nums)
46+
print(sliding_window_max([1, 3, 2, 5, 4], 1)) # Edge case: k == 1
47+
print(sliding_window_max([1, 3, 2, 5, 4], 5)) # Edge case: k == len(nums)
48+
print(sliding_window_max([8, 5, 10, 7, 9, 4, 15, 12, 90, 13], 3)) # Normal case

0 commit comments

Comments
 (0)