zoukankan      html  css  js  c++  java
  • 模拟--滑动窗口最大值

    https://leetcode-cn.com/problems/sliding-window-maximum/

    AC1

    模拟,暴力152ms

    class Solution {
    public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int>ans;
        if(nums.empty())
            return ans;
        list<int> window;
        list<int>::iterator it;
        for (int j = 0; j < k; ++j) {
            window.push_back(nums[j]);
        }
        for (int i = k; i <= nums.size(); ++i) {
            //查找最大值
            it = max_element(window.begin(),window.end());
            //添加至ans
            ans.push_back(*it);
            window.erase(window.begin());
            window.push_back(nums[i]);
        }
        return ans;
    }
    };
    

    AC2

    56ms
    每隔k个求一次最大值,就是优化求最大值的地方。当前最大值没有出窗口时,只需要比较新插入的值与最大值。

    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int>ans;
        if(nums.empty())
            return ans;
        list<int> window;
        list<int>::iterator it;
        for (int j = 0; j < k; ++j) {
            window.push_back(nums[j]);
        }
        //查找最大值
        it = max_element(window.begin(),window.end());
        int index =distance(window.begin(),it);
        //添加至ans
        ans.push_back(*it);
        for (int i = k; i < nums.size(); ++i) {
            window.erase(window.begin());
            window.push_back(nums[i]);
            index--;
            if(index<0){//出窗口
                it = max_element(window.begin(),window.end());
                index =distance(window.begin(),it);
                ans.push_back(*it);
            } else{//未出窗口
                if(nums[i]>(*it)){//新入的大于原最大值
                    index = k-1;//更新最大值位置
                    ans.push_back(nums[i]);
                    it = --window.end();//更新window最大值迭代器的指向,更新为最后一个
                } else{
                    ans.push_back(*it);
                }
            }
        }
        return ans;
    }
    
  • 相关阅读:
    pm2日志切割
    PM2常用命令
    Linux安装nodejs
    npm 修改源地址
    nodejs 生成验证码
    shell脚本解析json文件
    mysql添加用户并赋予权限命令
    Redis 配置密码
    JavaScript也是黑客技术?
    angular和vue的对比学习之路
  • 原文地址:https://www.cnblogs.com/sunqiangstyle/p/10312268.html
Copyright © 2011-2022 走看看