diff --git a/cpp/239-Sliding-Window-Maximum.cpp b/cpp/239-Sliding-Window-Maximum.cpp new file mode 100644 index 000000000..b374dd748 --- /dev/null +++ b/cpp/239-Sliding-Window-Maximum.cpp @@ -0,0 +1,25 @@ +class Solution { +public: + vector maxSlidingWindow(vector& nums, int k) { + vector res; + // monotonically decreasing queue. saves index + deque q; + for (int l = 0, r = 0; r < nums.size(); ++r) { + // only need to keep biggest value from the window, so pop elements smaller than new element from q + while (!q.empty() && nums[q.back()] < nums[r]) { + q.pop_back(); + } + q.push_back(r); + + // remove passed elements from window + if (l > q.front()) + q.pop_front(); + + if ((r + 1) >= k) { + res.push_back(nums[q.front()]); + ++l; + } + } + return res; + } +};