- 浏览: 183726 次
- 性别:
- 来自: 济南
文章分类
最新评论
Given an array 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.
For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.
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
Therefore, return the max sliding window as [3,3,5,5,6,7].
Note:
You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.
滑动窗口的题目,我们可以借助双向队列deque来解决。一边维护窗口的大小,一边将每个窗口的中的最大元素放在队列的头部,这样每次取队列的第一个元素就可以了。代码如下:
如果不用队列也可以,思路是一样的,维护一个窗口,当窗口移动之后,检查之前窗口的最大元素是否在移动后的窗口中,如果在只需要比较最大元素与新近的元素就可以;如果不存在就在新窗口中找最大元素。代码如下:
For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.
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
Therefore, return the max sliding window as [3,3,5,5,6,7].
Note:
You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.
滑动窗口的题目,我们可以借助双向队列deque来解决。一边维护窗口的大小,一边将每个窗口的中的最大元素放在队列的头部,这样每次取队列的第一个元素就可以了。代码如下:
public class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || nums.length == 0) return new int[0]; int[] result = new int[nums.length - k + 1]; Deque<Integer> deque = new LinkedList<Integer>(); int index = 0; for(int i = 0; i < nums.length; i++) { //查看之前的最大元素是否在窗口中,如果不在就删除 if(!deque.isEmpty() && (deque.getFirst() == (i - k))) deque.removeFirst(); //添加新的元素到队尾 while(!deque.isEmpty() && nums[deque.getLast()] <= nums[i]) deque.removeLast(); deque.addLast(i); //将最大元素加入到结果中 if(i >= k - 1) result[index ++] = nums[deque.getFirst()]; } return result; } }
如果不用队列也可以,思路是一样的,维护一个窗口,当窗口移动之后,检查之前窗口的最大元素是否在移动后的窗口中,如果在只需要比较最大元素与新近的元素就可以;如果不存在就在新窗口中找最大元素。代码如下:
public class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || nums.length == 0) return new int[0]; int[] result = new int[nums.length - k + 1]; int maxIndex = 0; int max = Integer.MIN_VALUE; int index = 0; for(int i = 0; i < result.length; i++) { if(i == 0 || maxIndex == i - 1) { max = Integer.MIN_VALUE; for(int j = i; j < i + k; j++) if(nums[j] > max) { max = nums[j]; maxIndex = j; } }else { if(nums[i + k - 1] > max) { max = nums[i + k - 1]; maxIndex = i + k - 1; } } result[index ++] = max; } return result; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 500Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 430Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 581Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 676Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 845Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 707For a undirected graph with tre ...
相关推荐
再判断3位置上的2,由于比1大(也就是队列的尾部比这个数小),所以把队列尾部弹出一个,1弹出,由于4比2大,就可以放2了:再看窗口中减数的逻辑,当L向右移动的时
在Qt Designer中,选择子窗口,然后在“属性编辑器”中设置“minimumSize”和“maximumSize”。 **编写代码** 1. 在`.cpp`文件中,我们将处理QSplitter的信号和槽。例如,可以创建一个槽函数,当QSplitter的分割线...
c c语言_leetcode题解之0239_sliding_window_maximum
- 滑动窗口最大值:在滑动窗口内维护一个最大值,如LeetCode题目《Sliding Window Maximum》。 - Dijkstra最短路径算法:用于寻找图中节点间的最短路径。 - Huffman编码:在数据压缩中构建最优的Huffman树。 5. ...
8. **滑动窗口最大值(Sliding Window Maximum)**:在数组中找到连续子数组的最大值,可以使用单调栈或双端队列(deque)等数据结构实现。 9. **数据结构优化**:文中提到了利用splay tree(自平衡搜索树)优化...
2. **Sliding Window Maximum**:找到数组中每个滑动窗口的最大值,可以使用队列来快速找到每个窗口的最大值。 ### 递归 递归是一种解决问题的方法,它通过调用自身来解决问题。递归通常用于解决树形结构的问题、...
5. **Sliding Window Maximum**:这是一个滑动窗口最大值问题,要求在不断移动窗口时,找到每个窗口内的最大值。可以使用单调栈或双端队列(deque)来解决。 6. **Factorial Trailing Zeroes**:该问题涉及到数学...
Maximum 255. Verify Preorder Sequence in Binary Search Tree 907. Sum of Subarray Minimums 二叉搜索树 99. Recover Binary Search Tree 109. Convert Sorted List to Binary Search Tree 116. Populating Next ...
1. **滑动窗口最大值(Sliding Window Maximum)**:可以使用滑动窗口最大值数据结构来快速找到度度熊能够消灭的僵尸血量范围。 2. **二分查找(Binary Search)**:通过二分查找在可能的血量范围内找到第k小的血量值,...
leetcode信封 LeetCode LeetCode解题 源码目录 //main下为源码,test下为单元测试 │ src │ ├─main │ └─java │ └─com │ └─algorithm │ GeneratorParenthesis.java //22. ...Sliding Window Maximum
318| [Maximum Product of Word Lengths](https://leetcode.com/problems/maximum-product-of-word-lengths/) | [C++](./C++/maximum-product-of-word-lengths.cpp) [Python](./Python/maximum-product-of-word-...
6. **滑动窗口最大值/最小值**:“滑动窗口最大值”(Sliding Window Maximum),使用双端队列和哈希表可以高效地找到每个窗口内的最大值。 7. **组合优化问题**:如“组合总和”(Combination Sum),哈希表可以...
而“Sliding Window Maximum”问题则需要我们理解队列的特性,找出数组中每个固定窗口大小的最大值。 二叉树问题在LeetCode中占据了相当大的比重,如“Binary Tree Inorder Traversal”要求中序遍历二叉树。学习...
例如,"滑动窗口最大值"(Sliding Window Maximum)需要找出数组中每个指定宽度窗口的最大值。 5. **哈希表**:哈希表提供了快速查找功能,常见于解决查找、计数、去重等问题。"两数之和"(Two Sum)也可以用哈希表...
LeetCode中的回溯法(Backtracking)和滑动窗口最大值(Sliding Window Maximum)等题目的解决方案常涉及栈和队列。 4. 哈希表:哈希表是一种通过键值对进行高效查找的数据结构。Java中的HashMap类提供了快速的插入...
滑动窗口线路利用率公式(Sliding Window Line Utilization Formula)是一种计算信道利用率的方法。该公式为: U = W / (2a + 1) 其中,U 是信道利用率,W 是窗口大小,a 是往返时延。在本题中,W = 1,a = 19.07...
4. **滑动窗口(Sliding Window)**:在解码过程中,考虑到当前时刻和一定历史范围内的信息,进行最优路径搜索。 5. **最大后验概率(Maximum A Posteriori, MAP)**和**最大似然(Maximum Likelihood, ML)**原则:...
Sliding Window,滑动窗口类型 滑动窗口类型的题目经常是用来执行数组或是链表上某个区间(窗口)上的操作。比如找最长的全为1的子数组长度。滑动窗口一般从第一个元素开始,一直往右边一个一个元素挪动。当然了,...
13.4.1 Sliding Window Lempel–Ziv Algorithm 441 13.4.2 Tree-Structured Lempel–Ziv Algorithms 442 13.5 Optimality of Lempel–Ziv Algorithms 443 13.5.1 Sliding Window Lempel–Ziv Algorithms 443 13.5.2 ...
作业说明 代码注释中有力扣链接. ...滑动窗口最大值, sliding-window-maximum.ts 两两交换链表中的节点, swap-nodes-in-pairs.ts 三数之和, three-sum.ts 接雨水, trapping-rain-water.ts 两数之和,