OD 算法题 B卷【阿里巴巴找黄金宝箱(V)】
文章目录
- 阿里巴巴找黄金宝箱(V)
阿里巴巴找黄金宝箱(V)
- 宝藏地有编号从0~N-1的箱子,每个箱子上面贴有一个数字,找出连续k个宝箱数字之和的最大值,并输出该最大值;
输入描述:
第一行输入一串数字,以逗号分隔,数字值在【-10000,10000】,数字个数范围在【1,100000】;
第二行输出数字k, k < N
输出描述:
连续k个宝箱数字之和的最大值
示例1
输入:
2,10,-3,-8,40,5
4
输出:
39
示例2
输入:
8
1
输出:
8
示例3
输入:
3,4,6,-3,-1,5,8,-5,7,10,-2,0,-10
5
输出:
25
python实现
- 固定长度k的滑动窗口 + 双指针;
nums = list(map(int, input().strip().split(",")))
n = len(nums)
k = int(input().strip())max_sum = 0
temp_sum = 0
# 双指针
pre, cur = 0, k - 1
for i in range(k):temp_sum += nums[i]
max_sum = max(max_sum, temp_sum)while cur < n - 1:temp_sum += nums[cur+1]temp_sum -= nums[pre]max_sum = max(max_sum, temp_sum)# 走到预先计算的位置cur += 1pre += 1print(max_sum)