生成視窗最大值陣列

2022-04-06 00:31:47 字數 1421 閱讀 6197

【說明】:

本文是左程雲老師所著的《程式設計師面試**指南》第一章中「生成視窗最大值陣列」這一題目的c++復現。

感謝左程雲老師的支援。

【題目】:

有乙個整形陣列 arr 和乙個大小為 w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑動乙個位置。

例如,陣列為 ,視窗大小為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 陣列的最大值序號。

【編譯環境】:

centos6.7(x86_64)

gcc 4.4.7

【實現】:

實現及測試**:

/*

*檔名:maxwindow.cpp

*摘要:生成視窗最大值陣列的實現及測試** */

#include

#include

using

namespace

std;

/**函式介紹:生成視窗最大值陣列的實現**

*輸入引數:arr為源陣列;len為陣列的長度;w為視窗的大小

*輸出引數:

*返回值:指向視窗最大值陣列的指標 */

int* getmaxwindow(int arr,int len,int

w)

int index = 0

;

for(int i=0;i)

return

res;

}int

main()

;

int *res = getmaxwindow(arr,8,3

);

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

cout

<< res[i] <

return0;

}

view code

stl系列之一:deque雙向佇列

c++ deque(

雙向佇列)

注:

生成視窗最大值陣列

題目描述 有乙個整型陣列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 表示陣...

生成視窗最大值

生成視窗最大值陣列 題目 有乙個整型陣列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...