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

牛牛的果实收集

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



全部评论

相关推荐

码农索隆:单休一个月少休息4天,一年就是48天,平时节假日,别人3天假期,单休的两天
点赞 评论 收藏
分享
07-07 12:47
门头沟学院 Java
码农索隆:竟然还真有卡体检报告的
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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