【說明】:
本文是左程雲老師所著的《程式設計師面試**指南》第一章中「生成視窗最大值陣列」這一題目的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
【實現】:
實現及測試**:
/*view code*檔名: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;
}
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...