"""
滑动窗口
给定一个整数数组,有一个大小为x的滑动窗口。
窗口从数组的最左侧移动到数组的最右侧,
滑动窗口每次只向右移动一位,
返回滑动窗口中每次的最大值。
"""
def sliding_window(nums, x):
"""
计算给定数组中每个长度为x的滑动窗口中的最大值。
参数:
nums: 列表,输入的整数数组。
x: 整数,滑动窗口的长度。
返回:
列表,每个滑动窗口中的最大值组成的数组。
"""
# 初始化数组长度
length = len(nums)
# 初始化前缀和数组,用于存储从窗口开始到当前位置的最大值
prefix = [0] * length
# 初始化后缀和数组,用于存储从当前位置到窗口结束的最大值
suffix = [0] * length
# 遍历数组,填充前缀和数组
for i in range(length):
# 如果当前位置是窗口的起始位置,则直接取当前位置的值
if i % x == 0:
prefix[i] = nums[i]
# 否则,取当前位置和前一个位置的最大值
else:
prefix[i] = max(prefix[i - 1], nums[i])
# 遍历数组,填充后缀和数组
for i in range(length - 1, -1, -1):
# 如果当前位置是窗口的结束位置,则直接取当前位置的值
if i == length - 1 or (i + 1) % x == 0:
suffix[i] = nums[i]
# 否则,取当前位置和后一个位置的最大值
else:
suffix[i] = max(suffix[i + 1], nums[i])
# 计算每个滑动窗口的最大值,即前缀和和后缀和的最大值
result = [max(suffix[i], prefix[i + x - 1]) for i in range(length - x + 1)]
# 返回结果数组
return result
# 调用函数并打印结果
print(sliding_window([0, -1, 2, -3, 4, -9, 8, -7, 6, -5], 3))
评论前必须登录!
注册