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

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

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:30
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了 ,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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