Last updated on October 5th, 2024 at 09:25 pm
Here, We see Sliding Window Maximum LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
Topics
Heap, Sliding-Window
Companies
Amazon, Google, Zenefits
Level of Question
Hard
Sliding Window Maximum LeetCode Solution
Table of Contents
Problem Statement
You are given an array of integers nums
, there is a sliding window of size k
which is moving from the very left of the array to the very right. You can only see the k
numbers in the window. Each time the sliding window moves right by one position.
Return the max sliding window.
Example 1:
Input: nums = [1,3,-1,-3,5,3,6,7], k = 3
Output: [3,3,5,5,6,7]
Explanation:
Window position | Max |
[1 3 -1] -3 5 3 6 7 | 3 |
1 [3 -1 -3] 5 3 6 7 | 3 |
1 3 [-1 -3 5] 3 6 7 | 5 |
1 3 -1 [-3 5 3] 6 7 | 5 |
1 3 -1 -3 [5 3 6] 7 | 6 |
1 3 -1 -3 5 [3 6 7] | 7 |
Example 2:
Input: nums = [1], k = 1
Output: [1]
1. Sliding Window Maximum LeetCode Solution C++
class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> result; if (k == 0) return result; multiset<int> 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. Sliding Window Maximum LeetCode Solution Java
class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || k <= 0) { return new int[0]; } int n = nums.length; int[] r = new int[n-k+1]; int ri = 0; Deque<Integer> q = new ArrayDeque<>(); for (int i = 0; i < nums.length; i++) { while (!q.isEmpty() && q.peek() < i - k + 1) { q.poll(); } while (!q.isEmpty() && nums[q.peekLast()] < nums[i]) { q.pollLast(); } q.offer(i); if (i >= k - 1) { r[ri++] = nums[q.peek()]; } } return r; } }
3. Sliding Window Maximum LeetCode Solution JavaScript
var maxSlidingWindow = function(nums, k) { const q = []; const res = []; for (let i = 0; i < nums.length; i++) { while (q && nums[q[q.length - 1]] <= nums[i]) { q.pop(); } q.push(i); if (q[0] === i - k) { q.shift(); } if (i >= k - 1) { res.push(nums[q[0]]); } } return res; };
4. Sliding Window Maximum Solution Python
class Solution(object): def maxSlidingWindow(self, nums, k): d = collections.deque() out = [] for i, n in enumerate(nums): while d and nums[d[-1]] < n: d.pop() d += i, if d[0] == i - k: d.popleft() if i >= k - 1: out += nums[d[0]], return out