From ee3903dd9e1918834a62219de6e92389c353b101 Mon Sep 17 00:00:00 2001 From: sanjiv0286 Date: Wed, 25 Oct 2023 01:29:42 +0530 Subject: [PATCH] Sliding Window Maximum - Leetcode Fixes #716 --- .vscode/settings.json | 3 + CPP/sliding-window/Sliding Window Maximum.cpp | 106 +++++++++++++----- 2 files changed, 82 insertions(+), 27 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..70e34ecb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.errorSquiggles": "disabled" +} \ No newline at end of file diff --git a/CPP/sliding-window/Sliding Window Maximum.cpp b/CPP/sliding-window/Sliding Window Maximum.cpp index c3579422..19e8624a 100644 --- a/CPP/sliding-window/Sliding Window Maximum.cpp +++ b/CPP/sliding-window/Sliding Window Maximum.cpp @@ -1,35 +1,87 @@ class Solution { public: vector maxSlidingWindow(vector& nums, int k) { + int n= nums.size(); + vectorv; + deque dq; + for (int i = 0; i < k; ++i) { - deque maxi(k); - vector ans; + while (!dq.empty() && nums[i] >= nums[dq.back()]) + dq.pop_back(); + + + dq.push_back(i); + } + + for (int i=k; i < n; ++i) { - for(int i = 0; i < k; i++) { - - while(!maxi.empty() && nums[maxi.back()] <= nums[i]) { - maxi.pop_back(); - } - maxi.push_back(i); - } - ans.push_back(nums[maxi.front()]); + // cout << nums[dq.front()] << " "; + v.push_back(nums[dq.front()] ); + - for(int i = k; i < nums.size(); i++) { - - //removal - while(!maxi.empty() && i-maxi.front() >= k) { - maxi.pop_front(); - } - - //addition - while(!maxi.empty() && nums[maxi.back()] <= nums[i]) { - maxi.pop_back(); - } - - maxi.push_back(i); - - ans.push_back(nums[maxi.front()]); - } - return ans; + while ((!dq.empty()) && dq.front() <= i - k) + dq.pop_front(); + + + while ((!dq.empty()) && nums[i] >= nums[dq.back()]) + dq.pop_back(); + + + dq.push_back(i); + } +// cout << nums[dq.front()]; + v.push_back(nums[dq.front()]); + return v; + } }; + +//************************* 1. O(NlogK) ******************************** + +// vector maxSlidingWindow(vector& nums, int k) { +// vector result; +// if (k == 0) return result; +// multiset w; +// for (int i = 0, n = (int)nums.size(); i < n; i++) { +// if (i >= k) +// w.erase(w.find(nums[i-k])); +// w.insert(nums[i]); +// if (i >= k-1) +// result.push_back(*w.rbegin()); +// } +// return result; +// } + +//************************* 2. O(NlogN) *********************************** + +// vector maxSlidingWindow(vector& nums, int k) { +// vector result; +// if (k == 0) return result; +// priority_queue> w; +// for (int i = 0, n = (int)nums.size(); i < n; i++) { +// while (!w.empty() && w.top().second <= i-k) +// w.pop(); +// w.push(make_pair(nums[i],i)); +// if (i >= k-1) +// result.push_back(w.top().first); +// } +// return result; +// } + +//***************************** 3. O(N) ******************************** + +// vector maxSlidingWindow(vector& nums, int k) { +// vector result; +// if (k == 0) return result; +// deque w; +// for (int i = 0, n = (int)nums.size(); i < n; i++) { +// while (!w.empty() && w.front() <= i-k) +// w.pop_front(); +// while (!w.empty() && nums[w.back()] <= nums[i]) +// w.pop_back(); +// w.push_back(i); +// if (i >= k-1) +// result.push_back(nums[w.front()]); +// } +// return result; +// } \ No newline at end of file