劍指offer59 I 滑動視窗的最大值

2021-10-08 18:18:02 字數 1154 閱讀 4976

題目描述

給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。

解析解法一:

沒有任何優化,直接擷取陣列,依次遍歷求各陣列最大值

public

int[

]maxslidingwindow

(int

nums,

int k)

maxnums[i]

=max;

}return maxnums;

}

解法二:

當滑動視窗變換時,若最大值並沒有被滑出去,則只需要比較新加入的值與當前最大值即可,而不需遍歷整個滑動視窗的值。

public

int[

]maxslidingwindow

(int

nums,

int k)

}else}}

maxnums[i]

=max;

}return maxnums;

}

解法三:題解之雙端佇列

移動視窗時,新加入的值要保持雙端佇列的單調遞減性,因此,當新加入的值大於隊尾的值時,要將隊尾元素出隊,直到隊列為空或佇列保持單調性;而移動視窗時被刪除的值若等於隊首元素時,要將隊首元素出隊,滑動視窗的最大值一直是當前雙端佇列的隊首元素。

public

int[

]maxslidingwindow

(int

nums,

int k)

deque.

addlast

(nums[i]);

} maxnums[0]

=deque.

peekfirst()

;//形成視窗

for(

int i=k;i)while

(!deque.

isempty()

&& deque.

peeklast()

) deque.

addlast

(nums[i]);

maxnums[i-k+1]

=deque.

peekfirst()

;}return maxnums;

}

劍指 Offer 59 I 滑動視窗的最大值

給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6...

劍指 Offer 59 I 滑動視窗的最大值

給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6...

劍指 Offer 59 I 滑動視窗的最大值

給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6...