"""
设计:Python程序设计
作者:初学者
日期:2022年 04月 14日
"""
# 例74 滑动窗口内数的和
# 1.问题描述
# 给定一个大小为n的整数数组和一个大小为k的滑动窗口,将滑动窗口从头移到尾,
# 每次移动一个整数输出从开始到结束每个时刻滑动窗口内数的和。
# 2.问题示例
# 输入array=[1,2,7,8,5],k=3,输出[10,17,20],表示第一个窗口1+2+7=10,
# 第二个窗口2+7+8=17,第三个窗口7+8+5=20.
# 3.代码实现
class Solution:
"""
array:整数数组
k:滑动窗口大小
返回每个窗口的数字和
"""
def window_size_sum(self, array, k):
n = len(array)
if n < k or k <= 0:
return []
sums = [0] * (n - k + 1)
for i in range(k):
sums[0] += array[i]
for i in range(1, n - k + 1):
sums[i] = sums[i - 1] - array[i - 1] + array[i + k - 1]
return sums
# 主函数
if __name__ == '__main__':
s = Solution()
array = [1, 2, 7, 8, 5]
k = 3
print("输入:", array)
print("输出:", s.window_size_sum(array, k))
进阶的魔法方法
"""
设计:Python程序设计
作者:初学者
日期:2022年 04月 14日
"""
"""
设计:Python程序设计
作者:初学者
日期:2022年 04月 14日
"""
# 例74 滑动窗口内数的和
# 1.问题描述
# 给定一个大小为n的整数数组和一个大小为k的滑动窗口,将滑动窗口从头移到尾,
# 每次移动一个整数输出从开始到结束每个时刻滑动窗口内数的和。
# 2.问题示例
# 输入array=[1,2,7,8,5],k=3,输出[10,17,20],表示第一个窗口1+2+7=10,
# 第二个窗口2+7+8=17,第三个窗口7+8+5=20.
# 3.代码实现
class Solution:
"""
array:整数数组
k:滑动窗口大小
返回每个窗口的数字和
"""
def __init__(self, array, k):
self.array = array
self.k = k
def window_size_sum(self):
n = len(self.array)
if n < self.k or self.k <= 0:
return []
sums = [0] * (n - self.k + 1)
for i in range(self.k):
sums[0] += self.array[i]
for i in range(1, n - self.k + 1):
sums[i] = sums[i - 1] - self.array[i - 1] + self.array[i + self.k - 1]
return sums
# 主函数
if __name__ == '__main__':
s = Solution([1, 2, 7, 8, 5], 3) # 实例变量
s2 = Solution([2, 4, 6, 8, 5, 7, 12], 4) # 实例变量
array = [1, 2, 7, 8, 5]
k = 3
print("输入:", array)
print("输出:", s.window_size_sum())
print("输出:", s2.window_size_sum())