• 滑动窗口的最大值


    题目:给定一个数组和滑动窗口的大小,请找到所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别是{4,4,6,6,6,5},如图所示:

     1 #include<iostream>
     2 #include<vector>
     3 #include<deque>
     4 using namespace std;
     5 
     6 vector<int> maxInWindows(const vector<int>& num,unsigned int size)
     7 {
     8  vector<int> MaxInWindows;
     9  if(num.size()>size&&size>=1)
    10  {
    11   deque<int> index;
    12   for(unsigned int i=0;i<size;++i)
    13   {
    14    while(!index.empty()&&num[i]>=num[index.back()])
    15      index.pop_back();
    16    index.push_back(i);
    17    }
    18   for(i=size;i<num.size();++i)
    19   {
    20     MaxInWindows.push_back(num[index.front()]);
    21     while(!index.empty()&&num[i]>=num[index.back()])
    22     index.pop_back();
    23     if(!index.empty()&&index.front()<(int)(i-size))
    24         index.pop_front();
    25     index.push_back(i);
    26   }
    27  MaxInWindows.push_back(num[index.front()]);
    28  }
    29 return MaxInWindows;
    30 }
    31 
    32 void print(vector<int> result)
    33 {
    34     vector<int>::iterator ite;
    35     for(ite=result.begin();ite!=result.end();++ite)
    36         cout<<*ite<<" ";
    37         cout<<endl;
    38          result.clear();
    39 }
    40 
    41 void main()
    42 {
    43     int ia[10]={1,2,3,4,5,6,7,8,9,10};
    44     vector<int> ib(ia,ia+10);
    45     print(maxInWindows(ib,3));
    46 }

     方法2:

     1 #include<iostream>
     2 #include<vector>
     3 #include<deque>
     4 using namespace std;
     5 
     6 
     7 int searchmax(const vector<int>&num,unsigned int size)
     8 {
     9      int max=num[0];
    10     for(int i=1;i<size;i++)
    11     {
    12         if(num[i]>max)
    13             max=num[i];
    14     }
    15     return max;
    16 }
    17 
    18 vector<int> maxInWindows(vector<int>& num,unsigned int size)
    19 {
    20  vector<int> MaxInWindows;
    21  int length=num.size();
    22  for(int i=0;i<length-size+1;i++)
    23  {
    24   MaxInWindows.push_back(searchmax(num,size));
    25       num.erase(num.begin());
    26  }
    27 return MaxInWindows;
    28 }
    29 
    30 
    31     
    32 
    33 void print(vector<int> result)
    34 {
    35     vector<int>::iterator ite;
    36     for(ite=result.begin();ite!=result.end();++ite)
    37         cout<<*ite<<" ";
    38         cout<<endl;
    39          result.clear();
    40 }
    41 
    42 void main()
    43 {
    44     int ia[10]={1,2,3,4,5,6,7,8,9,10};
    45     vector<int> ib(ia,ia+10);
    46     print(maxInWindows(ib,3));
    47     print(ib);
    48 }
  • 相关阅读:
    课后作业-阅读任务-阅读提问-2
    课后作业-阅读任务-阅读提问-3
    结对-贪吃蛇-需求分析
    《团队-团队编程项目作业名称-最终程序》
    《20171130-构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-4
    团队-井字棋游戏-项目总结
    《软件工程课程总结》
    团队编程项目作业5-小组评分
    课后作业-结对编程项目总结
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5479189.html
Copyright © 2020-2023  润新知