题解 | #牛牛的果实收集#

牛牛的果实收集

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



全部评论

相关推荐

点赞 评论 收藏
分享
06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务