滑动窗口-滑动窗口中的最大值
程序员文章站
2022-06-01 22:48:59
...
找出每一个窗口中的最大值并保存这个最大值的结果
法1:依次迭代所有的窗口,窗口中的数值再比较大小
法2:依次迭代所有的窗口,让新增的数值与上一个窗口中的最大值索引进行比较,如果上一个最大值的索引不位于上一个窗口的起始处,让新增的数据与上一次的最大值直接进行大小比较即可,并保留结果较大的值。若索引位于上一个窗口的起始处,则此窗口中的数据依次比较大小
法二代码与结果如下:
class Solution(object):
def maxSlidingWindow(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
if (len(nums)<k)|(nums==[]):
return []
cur_index=0
sum=[]
last_max_index=0
while cur_index<=len(nums)-k:
if cur_index==0:
cur_max=nums[cur_index]
for i in range(1,k):
if nums[cur_index+i]>=cur_max:
cur_max=nums[cur_index+i]
last_max_index=i
else:
if last_max_index>=1:
if nums[cur_index+last_max_index-1]>=nums[cur_index+k-1]:
cur_max=nums[cur_index+last_max_index-1]
last_max_index=last_max_index-1
else:
cur_max=nums[cur_index+k-1]
last_max_index=k-1
else:
cur_max=nums[cur_index]
last_max_index=0
for i in range(1,k):
if nums[cur_index+i]>=cur_max:
cur_max=nums[cur_index+i]
last_max_index=i
cur_index+=1
sum.append(cur_max)
return sum
其思想类似于在滑动窗口中求和时只要对上一次的结果减去上上一次的头部索引值再加上此窗口末尾的值
上一篇: 普通键盘进水故障维护方法
下一篇: UVA - 12563