题解 | #牛牛的果实收集#
牛牛的果实收集
https://www.nowcoder.com/practice/635abf2c6d4348e3bf958aae7c941c3e
解题思路:
需要确认的问题有两点:
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