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

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

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))

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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