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;
    }
    
  • 相关阅读:
    SRM 588 D2 L3:GameInDarknessDiv2,DFS
    [置顶] ProDinner体验
    [置顶] 强制访问控制内核模块Smack
    Java小项目--坦克大战(version1.0)
    utf-8-validation
    is-subsequence
    perfect-rectangle
    find-the-difference
    longest-absolute-file-path
    first-unique-character-in-a-string
  • 原文地址:https://www.cnblogs.com/sunqiangstyle/p/10312268.html
Copyright © 2011-2022 走看看