题解 | 环形数组的连续子数组最大和
环形数组的连续子数组最大和
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))
查看11道真题和解析