题目链接:力扣https://leetcode-cn.com/problems/sliding-window-maximum/
题意:
给你一个整数数组
nums
,有一个大小为k
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k
个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。
方法: 模拟,利用数据结构mutiset,可包含重复元素,mutiset底层实现是红黑树
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> ret;//返回向量
multiset<int> mst;//可重复集合
int size = nums.size();//统计数组长度
k = k<size?k:size;//避免越界
for(int i=0;i<k;i++)//枚举第一轮,找到最大值和次大值
{
mst.insert(nums[i]);
}
ret.emplace_back(*mst.rbegin());//取末端元素
for(int i=1;i<=size-k;i++)
{
mst.erase(mst.find(nums[i-1]));//通过指针来删除某个数字,而不是直接删除数字,直接删除数字会把所有数字都删掉
mst.insert(nums[k+i-1]);//插入末尾的数字
ret.emplace_back(*mst.rbegin());//在返回的向量中插入集合末尾的指针指向的值
}
return ret;//返回向量
}
};