Website Summary Files Commits Branches @commit @diff @stats
path: root / Seminar03 / task03.cpp
diff options
context:
space:
mode:
1 files changed, 41 insertions, 0 deletions
-rw-r--r--Seminar03/task03.cpp41
diff --git a/Seminar03/task03.cpp b/Seminar03/task03.cpp
new file mode 100644
index 0000000..eef4cf4
--- /dev/null
+++ b/Seminar03/task03.cpp
@@ -0,0 +1,41 @@
+#include<iostream>
+#include<deque>
+#include<vector>
+
+std::vector<int> maxSlidingWindow(const std::vector<int>& v, size_t k) {
+ std::deque<int> window;
+ std::vector<int> result;
+
+ for (size_t i = 0; i < k; i++) {
+ while(!window.empty() && window.back() < v[i]) {
+ window.pop_back();
+ }
+ window.push_back(v[i]);
+ }
+
+ result.push_back(window.front());
+
+ for (size_t i = k; i < v.size(); i++) {
+ if(window.front() == v[i - k]) {
+ window.pop_front();
+ }
+
+ while(!window.empty() && window.back() < v[i]) {
+ window.pop_back();
+ }
+
+ window.push_back(v[i]);
+ result.push_back(window.front());
+ }
+
+ return result;
+}
+
+int main() {
+ std::vector<int> example = {1, 3, -1, -3, 5, 3, 6, 7};
+
+ std::vector<int> result = maxSlidingWindow(example, 3);
+
+ for(auto elem : result)
+ std::cout << elem << " ";
+} \ No newline at end of file