题解 | 环形数组的连续子数组最大和

环形数组的连续子数组最大和

https://www.nowcoder.com/practice/53a9f1ba687440cc9c641c2b042a59d7

def maxSubarraySumCircular(nums):
    if not nums:
        return 0

    # 初始化变量
    total_sum = 0
    max_sum = float("-inf")
    min_sum = float("inf")
    current_max = 0
    current_min = 0

    for num in nums:
        # 计算数组的总和
        total_sum += num

        # 计算最大子数组和
        current_max = max(num, current_max + num)
        max_sum = max(max_sum, current_max)

        # 计算最小子数组和
        current_min = min(num, current_min + num)
        min_sum = min(min_sum, current_min)

    # 情况1:最大子数组和不跨越环形边界
    case1 = max_sum

    # 情况2:最大子数组和跨越环形边界
    case2 = total_sum - min_sum if total_sum != min_sum else max_sum

    # 返回两种情况的最大值
    return max(case1, case2)


# 输入处理
n = int(input())
nums = list(map(int, input().split()))
# 输出结果
print(maxSubarraySumCircular(nums))

全部评论

相关推荐

06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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