一、题目
二、代码
class Solution {
public:
class My_Compare //仿函数改变排序规则
{
public:
bool operator() (const int& v1, const int& v2) const
{
return (v1 > v2);
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k)
{
//返回划窗每次滑动所留下元素的最大值 组成一个vector容器
//我觉得set这种类型的容器好像刚好可以实现要求 multiset可以帮忙排序 但是删除的时候 记得只是删除一个
int i,j;
multiset<int, My_Compare> max_to_min_windos;
vector<int> return_vector;
int delete_element;
for(i=0;i<k;i++) max_to_min_windos.insert(nums[i]); //插入k次 里面默认按照从大到小的排序
// for(multiset<int>::iterator it=max_to_min_windos.begin();it!=max_to_min_windos.end();it++)
// {
// cout<<*it<<" ";
// }
// cout<<endl;
return_vector.push_back(*max_to_min_windos.begin()); //第一次不需要删除
for(i=k;i<nums.size();i++)
{
//第二次开始 先删除 在插入 接着是查找
max_to_min_windos.erase(max_to_min_windos.find(nums[i-k])); //查找需要删除元素的pos 然后删除它 (一定可以找到)
max_to_min_windos.insert(nums[i]); //插入
return_vector.push_back(*max_to_min_windos.begin()); //取最大值 接在vector尾部
}
return return_vector;
}
};