题目
题目描述
一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,
藏宝地有编号从0~N的箱子,每个箱子上面贴有一个数字。
阿里巴巴念出一个咒语数字k(k<N),找出连续k个宝箱数字和的最大值,
并输出该最大值。
输入描述
第一行输入一个数字字串,数字之间使用逗号分隔,
例如:2,10,-3,-8,40,5
1 ≤ 字串中数字的个数 ≤ 100000
-10000 ≤ 每个数字 ≤ 10000
第二行输入咒语数字,例如:4,咒语数字大小小于宝箱的个数
输出描述
连续k个宝箱数字和的最大值,例如:39
用例1
输入
2,10,-3,-8,40,5
4
输出
39
说明
无
用例2
输入
2,20,-3,-8,40,-5
3
输出
29
解题思路
遍历拿到的字符串转换后的列表,从列表拿出规定滑动窗口的数字放入滑动窗口列表,然后求和,找出最大值。注意,数字求和后需要从顶端剔除一个数字。类似队列的操作。
python代码
def Find_Golden_Box(num, k):
'''
:param num: 数字列表
:param k: 滑动窗口数字个数
:return: 滑动窗口求和最大值
'''
box_list = num
sum_list=[]
max_num=0
for i in range(len(box_list)):
sum_list.append(box_list[i])
if len(sum_list)==int(k):
if max_num<sum(sum_list):
max_num=sum(sum_list)
sum_list.pop(0)
print(max_num)
if __name__ == '__main__':
str='2,10,-3,-8,40,5'
#数字转int
num=[int(x) for x in str.split(',')]
k=4
max_num=Find_Golden_Box(num,k)
总结
- 涉及知识点 pop的使用
- 滑动窗口的遍历使用
- 列表推导式的使用
- int数字支持正负数的计算