牛客——滑动窗口的最大值

题目描述
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
题解:
1,定义两个vector数组,array保存每次滑动窗口时的size个元素,maxnum保存最大值
2,通过*max_element(array.begin(), array.end())获取最大值
3,通过vector::iterator idx = array.begin(); array.erase(idx);删除数组头部元素

class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size)
    {
        vector<int> maxnum;//保存最大值
        vector<int> array;//保存每次窗口滑动后的数组
        unsigned int length = num.size();//原num数组的长度
        unsigned int k = 0;//记录遍历num的位置
        
        if (size>length || size<1)
            return maxnum;
        
        while (k < size-1)
            array.push_back(num[k++]);
        
        for (int i=0; i<length-size+1; i++)
        {
            array.push_back(num[k++]);
            maxnum.push_back(*max_element(array.begin(), array.end()));//保存当前滑动窗口内的最大值
            vector<int>::iterator idx = array.begin();
            array.erase(idx);//删除array中头部元素
        }
        return maxnum;
    }
};
发布了315 篇原创文章 · 获赞 119 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/w144215160044/article/details/105006589