From 7b38c7fa2a76d912ca45576c06b9f900d77b616c Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Wed, 19 Oct 2022 13:15:50 +0300 Subject: add Sem03 --- Seminar03/task03.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Seminar03/task03.cpp (limited to 'Seminar03/task03.cpp') 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 +#include +#include + +std::vector maxSlidingWindow(const std::vector& v, size_t k) { + std::deque window; + std::vector 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 example = {1, 3, -1, -3, 5, 3, 6, 7}; + + std::vector result = maxSlidingWindow(example, 3); + + for(auto elem : result) + std::cout << elem << " "; +} \ No newline at end of file -- cgit v1.3.1-23-gd82d