Skip to content

Commit 1af8e37

Browse files
committed
Sliding Window Maximum
1 parent a57b26d commit 1af8e37

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

Queue/SlidingWindowMaximum.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include <iostream>
2+
#include <deque>
3+
#include <vector>
4+
using namespace std;
5+
// using deque
6+
7+
vector<int> maxSlidingWindow(vector<int> &nums, int k)
8+
{
9+
deque<int> dq;
10+
vector<int> res;
11+
12+
// first window
13+
14+
for (int i = 0; i < k; i++)
15+
{
16+
// delete smaller value
17+
while (dq.size() > 0 && nums[dq.back()] <= nums[i])
18+
{
19+
dq.pop_back();
20+
}
21+
// push new index values
22+
dq.push_back(i);
23+
}
24+
25+
for (int i = k; i < nums.size(); i++)
26+
{
27+
res.push_back(nums[dq.front()]);
28+
29+
// remove elements not part of current window
30+
while (dq.size() > 0 && dq.front() <= i - k)
31+
{
32+
dq.pop_front();
33+
}
34+
35+
// delete smaller value
36+
while (dq.size() > 0 && nums[dq.back()] <= nums[i])
37+
{
38+
dq.pop_back();
39+
}
40+
41+
dq.push_back(i);
42+
}
43+
44+
res.push_back(nums[dq.front()]);
45+
return res;
46+
}
47+
48+
int main()
49+
{
50+
vector<int> nums = {1, 3, -1, -3, 5, 3, 6, 7};
51+
int k = 3;
52+
53+
vector<int> ans = maxSlidingWindow(nums, k);
54+
55+
for (int val : ans)
56+
{
57+
cout << val << " ";
58+
}
59+
cout << endl;
60+
61+
return 0;
62+
}

Queue/SlidingWindowMaximum.exe

93.7 KB
Binary file not shown.

0 commit comments

Comments
 (0)