diff --git a/08 Stacks & Queue/max_in_window_k.cpp b/08 Stacks & Queue/max_in_window_k.cpp index 936cb06..3b6c43b 100644 --- a/08 Stacks & Queue/max_in_window_k.cpp +++ b/08 Stacks & Queue/max_in_window_k.cpp @@ -1,57 +1,33 @@ + #include -#include -#include +#include +#include using namespace std; -void maxSubArrayK(vector a,int k){ - - //Algorithm - int n = a.size(); - - deque Q(k); - //1. Process only the first K elements - int i; - - for(i=0;i a[Q.back()]){ - Q.pop_back(); - } - - Q.push_back(i); - - } - - //2. Remaining the elements of the array - for( ;i= a[Q.back()]){ - Q.pop_back(); - } - - //always - Q.push_back(i); - } - - - cout<< a[Q.front()]; - +void maxSubArrayK(vector &nums, int k) +{ + vector ans; + deque dq; + for (int i = 0; i < nums.size(); i++) + { + if (!dq.empty() && dq.front() == i - k) + dq.pop_front(); + while (!dq.empty() && nums[dq.back()] < nums[i]) + dq.pop_back(); + dq.push_back(i); + if (i >= k - 1) + ans.push_back(nums[dq.front()]); + } + for (int i : ans) + { + cout << i << " "; + } } -int main() { - - vector arr{1,2,3,1,4,5,2,3,5}; - int k = 3; - - maxSubArrayK(arr,k); - - - - - return 0; -} \ No newline at end of file +int main() +{ + vector nums{1, 3, -1, -3, 5, 3, 6, 7}; + int k = 3; + maxSubArrayK(nums, k); + return 0; +}