题解 | #滑动窗口的最大值#

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

class Solution {
public:
    vector<int> maxInWindows(vector<int>& num, int size) {
        if(size>num.size()||size==0||num.size()==0)
            return {};
    //以上,排除3种特殊情况。
        int Ind_max=0;
    //以上,窗口最大值的下标。
        vector<int> res;
        for(int i=1;i<size;i++)
        {
            if(num[i]>=num[Ind_max])
                Ind_max=i;
        }
    //以上,计算第一个窗口的最大值。
        res.push_back(num[Ind_max]);
    //以下,已解决第i-1个窗口,考虑第i个窗口。
        for(int i=1;i<num.size()-size+1;i++)
        {
            if(Ind_max<i){
                Ind_max=i;
                for(int j=i+1;j<i+size;j++)
                    if(num[j]>=num[Ind_max])
                        Ind_max=j;
            }
    //以上,情形一:最大值正好被移出去,重新遍历窗口,求最大值。
            else if(num[i+size-1]>=num[Ind_max])
                Ind_max=i+size-1;
    //以上,情形二:最大值未被移出去,仅需比较最大值和新移入的值即求得窗口最大值。
            res.push_back(num[Ind_max]);
        }
        return res;
    }
};

全部评论

相关推荐

LastWh1spe...:ssob真有些人和那个没睡醒一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务