""" 滑动窗口 给定一个整数数组,有一个大小为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))
评论前必须登录!
注册