スライドウィンドウの最大値python
1040 ワード
配列とスライドウィンドウのサイズを指定し、すべてのスライドウィンドウの数値の最大値を見つけます.例えば、配列{2,3,4,2,6,2,5,1}およびスライドウィンドウのサイズ3を入力すると、合計6つのスライドウィンドウが存在し、それらの最大値はそれぞれ{4,4,6,6,6,6,5}である.配列{2,3,4,2,6,2,5,1}に対するスライド窓は,{[2,3,4],2,6,2,5,1},{3,4,2,5,1},{2,3,[4,2,6],2,5,1},{2,3,4,[2,6,2],5,1},{2,3,4,[2,6,2,5],{2,3,4,2,6,[2,5],{2,5,1},{2,3,4,2,5,{2,5,1}}の6つである
最大値の変化を格納するリストを作成し、リストの先頭が現在の最大値の座標であり、その後は二次大値などである.新しく数えたとき、まずボスがまだここまで管理しているかどうかを判断し、管理していないとポップアップします.新しく来たものは一つ一つ前の値と比較して、彼より小さいものは発言権がなく、直接ポップアップします.全部比べたら、弾いて、新しく来たのはボスです.真ん中に比類のないものがあれば列の末端に存在し、前を待っている人はいつも行って、後ろを管理できない.あるいはもともと空席があったり、ボスがいつも行ったりしているので、新しく来たのはいつも席があります.
最大値の変化を格納するリストを作成し、リストの先頭が現在の最大値の座標であり、その後は二次大値などである.新しく数えたとき、まずボスがまだここまで管理しているかどうかを判断し、管理していないとポップアップします.新しく来たものは一つ一つ前の値と比較して、彼より小さいものは発言権がなく、直接ポップアップします.全部比べたら、弾いて、新しく来たのはボスです.真ん中に比類のないものがあれば列の末端に存在し、前を待っている人はいつも行って、後ろを管理できない.あるいはもともと空席があったり、ボスがいつも行ったりしているので、新しく来たのはいつも席があります.
class Solution:
def maxInWindows(self, num,size):
if not num:
return []
if size > len(num) or size < 1:
return []
if size == 1:
return num
temp = [0]
res = []
for i in range(len(num)):
if i - temp[0] > size - 1:
temp.pop(0)
while len(temp) > 0 and num[i] >= num[temp[-1]]:
temp.pop()
temp.append(i)
if i >= size - 1:
res.append(num[temp[0]])
return res