スライドウィンドウの最大値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