有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置,求每一種視窗狀態下的最大值。(如果陣列長度為n,視窗大小為w,則一共產生n-w+1個視窗的最大值)
輸入描述:
第一行輸入 n 和 w ,分別代表陣列長度和視窗大小
第二行輸入 n 個整數 x
ix_i
xi ,表示陣列中的各個元素
輸出描述:
輸出乙個長度為 n-w+1 的陣列 res,res[i] 表示每一種視窗狀態下的最大值
示例1輸入
8 3
4 3 5 4 3 3 6 7
輸出5 5 5 4 6 7
說明例如,陣列為[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
輸出的結果為
備註:
1 ≤w
≤n≤1
06
1 \leq w \leq n \leq 10^6
1≤w≤n≤
106−10
6≤xi
≤106
-10^6 \leq x_i \leq 10^6
−106≤x
i≤1
06題解:用乙個單調遞減雙端佇列維護大小為 w 的視窗最大值,設當前元素為 cur ,若 cur 小於隊尾元素,則將 cur 插入隊尾;否則的話,從隊尾中彈出小於等於 cur 的元素,維護佇列的單調性。
**:
#include
using
namespace std;
const
int n =
1000010
;int a[n]
;int dq[n]
;int
main
(void
)return0;
}
生成視窗最大值陣列
題目描述 有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置,求每一種視窗狀態下的最大值。如果陣列長度為n,視窗大小為w,則一共產生n w 1個視窗的最大值 輸入描述 第一行輸入n和w,分別代表陣列長度和視窗大小 第二行輸入n個整數x,表示陣列中的各個元素 輸...
生成視窗最大值陣列
說明 本文是左程雲老師所著的 程式設計師面試 指南 第一章中 生成視窗最大值陣列 這一題目的c 復現。感謝左程雲老師的支援。題目 有乙個整形陣列 arr 和乙個大小為 w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑動乙個位置。例如,陣列為 視窗大小為3時 4 3 5 4 3 3 6 7 視窗中...
生成視窗最大值
生成視窗最大值陣列 題目 有乙個整型陣列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...