【題目】
有乙個整型陣列arr和乙個大小為w的視窗從陣列的最左邊滑到最右邊,視窗每次向右滑動乙個位置。
例如,陣列為[4,3,5,4,3,3,6,7],視窗大小為3時:依次出現的視窗為[4,3,5], [3,5,4], [5,4,3], [4,3,3], [3,3,6], [3,6,7]。
如果陣列長度是n,視窗大小是w,則一共產生n-w+1個視窗。
請實現乙個函式。
1、輸入:整型陣列arr,視窗大小w
2、輸出:乙個長度大小為n-w+1的陣列res,res[i]表示每一種視窗下的最大值。例如上面的例子,應該返回[5,5,5,4,6,7]。
【基本思路】
使用雙端佇列,遍歷一遍陣列,假設遍歷到的位置是 i,如果隊列為空或者隊尾所對應的元素大於arr[i],將位置 i 壓入佇列;否則將隊尾元素彈出,再將 i 壓入佇列。此時,判斷隊頭元素是否等於i - w,如果是的話說明此時隊頭已經不在當前視窗的範圍內,刪去。這樣,這個佇列就成了乙個維護視窗為w的子陣列的最大值更新的結構,隊頭元素就是每個視窗的最大值。
【**實現】
#python3.5
defgetmaxwindow
(arr, w):
if arr == none
or w < 1
or len(arr) < w:
return
deque =
res =
for i in range(len(arr)):
while deque and arr[deque[-1]] <= arr[i]:
deque.pop()
if deque[0] <= i - w:
deque.pop(0)
if i-w+1 >= 0:
return res
棧與佇列 移動視窗生成最大值的陣列
有乙個整數型陣列arr和乙個大小為w的視窗從陣列的最左端滑到最右端,視窗每次向右滑動乙個位置。就像是乙個滑動的指標,從頭指向尾,然後輸出視窗中資料的最大值。例如,一組資料為arr 4,3,5,4,3,3,6,7 視窗大小為w 3時 4 3 5 4 3 3 6 7 視窗中最大值為 5 4 3 5 4 ...
生成視窗最大值陣列
題目描述 有乙個整型陣列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 表示陣...