生成視窗最大值

2021-08-16 20:22:45 字數 1353 閱讀 7482

生成視窗最大值陣列

[題目]

有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次

向右邊滑乙個位置。

例如,陣列為[4,3,5,4,3,3,6,7],  視窗大小為3時:

[4 3 5] 4 3 3 6 7           視窗中最大值為5

4 [3 5 4] 3 3 6 7           視窗中最大值為5

4 3 [5 4 3] 3 6 7           視窗中最大值為5

4 3 5 [4 3 3] 6 7           視窗中最大值為4

4 3 5 4 [3 3 6] 7           視窗中最大值為6

4 3 5 4 3 [3 6 7]           視窗中最大值為7

如果陣列長度為n,視窗大小為w,則一共產生n-w+1個視窗的最大值。

請實現乙個函式。

輸入: 整型陣列arr,視窗大小為w。

輸出:乙個長度為n-w+1的陣列res,res[i]表示每一種視窗狀態下的最大值

結果應該返回。

#include#include#includeusing namespace std;

template int getarraylen(t& array)

int* getmaxwindow(int my, int w)

if(w < 1 || (getarraylen(arr) < w))

listlst;

list::iterator it;

list::iterator it1;

list::iterator it2;

it1 = lst.begin();

it2 = lst.end();

int* res = new int[getarraylen(arr) - w + 1];

int index = 0;

int ans = 0;

for(int i = 0; i < getarraylen(arr); i++)

while((!lst.empty()) && (arr[*it2] != 0) && (arr[*it2] <= arr[i]))

lst.push_back(i);

it1 = lst.begin();

if((*it1) == (i - w))

if(i >= (w - 1))

}return res;

}int main()

; for(int i = 0; i < w; i++)

int* b = getmaxwindow(arr, 3);

for(int i = 0; i < 6; i++)

{cout<

生成視窗最大值陣列

題目描述 有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置,求每一種視窗狀態下的最大值。如果陣列長度為n,視窗大小為w,則一共產生n w 1個視窗的最大值 輸入描述 第一行輸入n和w,分別代表陣列長度和視窗大小 第二行輸入n個整數x,表示陣列中的各個元素 輸...

生成視窗最大值陣列

有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置,求每一種視窗狀態下的最大值。如果陣列長度為n,視窗大小為w,則一共產生n w 1個視窗的最大值 輸入描述 第一行輸入 n 和 w 分別代表陣列長度和視窗大小 第二行輸入 n 個整數 x ix i xi 表示陣...

生成視窗最大值陣列

說明 本文是左程雲老師所著的 程式設計師面試 指南 第一章中 生成視窗最大值陣列 這一題目的c 復現。感謝左程雲老師的支援。題目 有乙個整形陣列 arr 和乙個大小為 w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑動乙個位置。例如,陣列為 視窗大小為3時 4 3 5 4 3 3 6 7 視窗中...