生成視窗最大值陣列

2021-10-08 11:57:06 字數 1201 閱讀 4021

有乙個整型陣列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...