題目描述
給定乙個陣列 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...