解题思路:
需要确认的问题有两点:
1、是否存在连续子序列和等于M,如果存在,则返回M;
2、如果不存在,需要确认连续子序列和与M的最小差值,返回M-最小差值。
具体实现:
1、通过循环计算序列的和,和大于M时,依次从前面减去对应数值;
2、判断处理后的子序列和是否等于M,如果相等,返回M;
3、不相等时,判断当前子序列和与M的差值是否小于当前最小差值,如果小于,则更新最小差值。最小差值初始值为M。循环中未出现子序列和等于M的情况,则返回M-最小差值。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param trees int整型一维数组
# @param M int整型
# @return int整型
#
class Solution:
def maxFruits(self , trees: List[int], M: int) -> int:
sum = 0
dif = M
j = 0
for i in range(0,len(trees)):
sum += trees[i]
while M < sum and j <= i:
sum -= trees[j]
j += 1
if sum == M:
return M
if M - sum < dif:
dif = M - sum
return M - dif

京公网安备 11010502036488号