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

    1.给定一个任意数组,和一个大小为w的窗口,该窗口从左到右依次滑动,得到窗口的每个状态下的最大值

     1 // maxWindow.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 #include <deque>
     7 #include <vector>
     8 #include <iterator>
     9 
    10 using namespace std;
    11 
    12 void getMaxWindow(vector<int> &arr,int w)
    13 {
    14     vector<int> result;
    15     int len = arr.size();
    16     if(len == 0 || w < 1 || len < w)
    17         return ;
    18 
    19     deque<int> qmax;
    20     for(int i = 0; i < len;i++)
    21     {    //1.在双端队列中始终维护一组下标,下标对应的数由大到小的排序
    22         while(!qmax.empty() && arr[qmax.back()] < arr[i])
    23             qmax.pop_back();
    24         qmax.push_back(i);
    25         //2.窗口刚好滑过去。往前弹出
    26         if(qmax.front() == i - w)
    27             qmax.pop_front();
    28         //3.从w-1位置开始每一步都收集相应的数
    29         if(i >= w-1)
    30             result.push_back(arr[qmax.front()]);
    31     }
    32     vector<int>::iterator ite = result.begin();
    33     for(;ite != result.end();ite++)
    34         cout<<*ite<<" ";
    35     cout<<endl;
    36 }
    37 
    38 int _tmain(int argc, _TCHAR* argv[])
    39 {
    40     vector<int> arr;
    41     arr.push_back(4);
    42     arr.push_back(3);
    43     arr.push_back(5);
    44     arr.push_back(4);
    45     arr.push_back(3);
    46     arr.push_back(3);
    47     arr.push_back(6);
    48     arr.push_back(7);
    49     int w = 3;
    50     getMaxWindow(arr,w);
    51     system("pause");
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    .net调用Oracle存储过程
    Ext.Net基本讲解
    Sql Server数据库中的数据类型和c#的数据类型的映射表
    c#.net常用字符串函数 .
    Extjs & Ext.net中的一些属性
    Oracle表名做为参数 返回值
    Oracle CASE WHEN 用法介绍
    c开发策略之错误处理
    堆和栈的区别
    assert用法总结
  • 原文地址:https://www.cnblogs.com/lp3318/p/5767264.html
Copyright © 2011-2022 走看看