演算法3 生成視窗最大值陣列

2021-10-01 06:33:03 字數 868 閱讀 5394

question:

有乙個整形陣列arr 和乙個大小為w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右滑動乙個位置;如果陣列長度是n,視窗大小是w,則一共產生n-w+1 個視窗,請實現乙個函式,

輸入:整形arr陣列,視窗大小w

輸出:乙個長度為n-w+1 的陣列res, res [i] 標識每種視窗狀態下掉最大值。

例:【3,4,6】7,9,2,4   最大值:6

3【4,6,7】9,2,4   最大值:7

3,4【6,7,9】2,4   最大值:9

3,4,6【7,9,2】4   最大值:9

3,4,6,7【9,2,4】   最大值:9

think:

要o(n) 複雜度的實現視窗最大值,需要一次遍歷的同時,記錄當前視窗內的最大值,及當前最大值資料過期(移除視窗)後的退出操作。

設計乙個雙端佇列(有序list),記錄陣列的下標。這個佇列儲存邏輯:

小於或等於視窗長度的(list.size)進入視窗的最大值。若當前元素比隊尾元素大,則隊尾元素不可能是最大值了(因為佇列長度小於等於視窗,當前視窗內最大值始終是當前元素x),直接移除隊尾,直到當前元素小於隊尾元素(當前小於隊尾,待隊尾元素過期後,有可能成為最大元素)或隊列為空,放入當前元素。

solution:

public int getmaxwindow(int arr,int w)

linkedlistqmax = new linkedlist();

int res = new int[arr.length - w + 1];

int index = 0;

for(int i=0;i= w-1)

}}

1 7生成視窗最大值陣列

1.題目 有乙個整形陣列arr和乙個大小為w的視窗從陣列的最左邊滑倒最右面,視窗每次向右邊滑動乙個位置。例如 4,3,5,4,3,3,6,7 視窗大小為3時,則產生的視窗最大值為 5,5,5,4,6,7 2.思路 每次看到一大堆的文字解釋我都不想看,為什麼不能有乙個圖示呢?要跪了 簡單的說利用雙端佇...

生成視窗最大值陣列

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