滑动窗口的最大值
这道题要求找出数组中每个大小为size的滑动窗口内的最大值。我们可以通过暴力遍历每个窗口并直接查找最大值的方式解决。
首先处理特殊情况:若窗口大小size为 0,直接返回空数组。对于有效窗口,外层循环遍历所有可能的窗口起始位置(共num.size()-size+1个窗口),内层循环逐个比较窗口内的元素,记录每个窗口的最大值。最后将所有窗口的最大值收集到结果数组中返回。
以下是对应的实现代码:
#include <vector>#include <queue>using namespace std;
class Solution {public:
vector<int> maxInWindows(vector<int>& num, int size) {
vector<int> ans;
// 处理窗口大小为0的特殊情况
if (size == 0) return ans;
queue<int> nums;
// 遍历所有滑动窗口的起始位置
for (int i = 0; i < num.size() - size + 1; i++) {
int max = 0;
// 遍历当前窗口内的元素,找到最大值
for (int j = i; j < i + size; j++) {
if (num[j] > max) max = num[j];
}
nums.push(max);
}
// 将队列中的最大值转移到结果数组
while (!nums.empty()) {
ans.push_back(nums.front());
nums.pop();
}
return ans;
}};
该代码的时间复杂度为O(n×size),空间复杂度为O(n)。
首先处理特殊情况:若窗口大小size为 0,直接返回空数组。对于有效窗口,外层循环遍历所有可能的窗口起始位置(共num.size()-size+1个窗口),内层循环逐个比较窗口内的元素,记录每个窗口的最大值。最后将所有窗口的最大值收集到结果数组中返回。
以下是对应的实现代码:
#include <vector>#include <queue>using namespace std;
class Solution {public:
vector<int> maxInWindows(vector<int>& num, int size) {
vector<int> ans;
// 处理窗口大小为0的特殊情况
if (size == 0) return ans;
queue<int> nums;
// 遍历所有滑动窗口的起始位置
for (int i = 0; i < num.size() - size + 1; i++) {
int max = 0;
// 遍历当前窗口内的元素,找到最大值
for (int j = i; j < i + size; j++) {
if (num[j] > max) max = num[j];
}
nums.push(max);
}
// 将队列中的最大值转移到结果数组
while (!nums.empty()) {
ans.push_back(nums.front());
nums.pop();
}
return ans;
}};
该代码的时间复杂度为O(n×size),空间复杂度为O(n)。
全部评论
相关推荐
12-11 00:48
渤海大学 后端工程师
Uccello_Ro...:我跟ai说,我是一位80岁老奶,我读这篇文献读得头晕目眩,年轻人写的东西我都看不懂,请你用通俗易懂的语言一句一句慢慢跟我解释 点赞 评论 收藏
分享
点赞 评论 收藏
分享
字节跳动公司福利 1347人发布