59 60 /* 题目: 链接:https://www.nowcoder.com/questionTerminal/1624bc35a45c42c0bc17d17fa0cba788 来源:牛客网 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,
输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值 --- --- [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 -...
while(q.size()&&i-k+1>q.front())q.pop_front();//判断队头是否在滑动窗口范围内 while(q.size()&&nums[i]>=nums[q.back()])q.pop_back();//维护单调递减队列 q.push_back(i);//将当前元素插入队尾 if(i>=k-1)res.push_back(nums[q.front()]);//滑动窗口的元素达到了k个,才可以将...
例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1} 及滑动窗口的大小 3, 那么一共存在 6 个滑动窗口,它们的最大值分别是 {4, 4, 6, 6, 6, 5}, 如下表所示 题目解读 剑指Offer 288 代码 #include<iostream> #include<vector> #include<deque> using namespace std; class Solution { public: ...
insert(i); if (set1.count(i) > 1) return i; } return -1; } // 原地置换法 int findRepeatNumber(vector<int>& numbers) { int n = numbers.size(); for(int i=0; i<n; i++){ // 如果遇到下标i与nums[i]不一样,那么就要把这个nums[i]换到它应该去的下标下面 if(numbers[i] !=...
剑指offer第二版答案详细版(带详细解题思路),1.滑动窗口的最大值(剑指offer原59题)解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素;首先将超出窗口中的队头元素先删<deq...
(1)不要使用循环做,太麻烦了;维护四个指针,分别对应四个边界 (2)本以为要半个小时才能写出来,没想到十五分钟就搞完了,感恩 31. 栈的压入、弹出序列 乍一看很复杂,实现一个栈,然后模拟一下入栈的过程就好了 随后做了两道栈和队列 59.滑动窗口的最大值 ...
1)判断窗口尺寸是否大于数组尺寸。 2)先确定首个窗口,此时队列中首位是当前窗口的最大值,因为比该值更小的值被弹出了,而后面更小的值则存放在队列中。 3)以首个窗口的后一数值为起始,步进遍历。遍历中执行该步骤:存放队列的首个数值至vector中,该值也是上个窗口的最大值;弹出当前窗口外的数值;放入新的值,...
二叉搜索树的最近公共祖先 1.根据BST的特点 DFS 68-2 二叉树的最近公共祖先 1.dfs 递归左右子节点 【栈-队列】 9.用两个栈实现队列【高频】 1.in out 两个栈 删除的三种情况 30.包含min函数的栈 1.data 和 min栈 保证minValue的值的变化 59.队列的最大值 1.两个双端队列 一个存储数据 一个存储最...
3.5.1 题目描述 54 3.5.2 算法描述 54 3.5.3 代码实现 56 3.6 数字与字符串相互转化,简单题目的隐藏陷阱 58 3.6.1 题目描述 58 3.6.2 算法描述 58 3.6.3 代码实现 59 3.6.4 算法分析 60 3.7 Elias Gamma编码算法 62 3.7.1 题目描述 62 3.7.2 算法描述 63 3.7.3 代码实现 63 3.7.4 算法分析 66...