环形子数组的最大和完整代码
时间: 2024-12-16 15:18:36 浏览: 8
环形子数组的最大和是指在一个数组中,通过连续选择若干元素形成的一个循环子数组(首尾相连),求这个循环子数组的最大和。这是一个经典的动态规划问题,通常可以使用Kadane算法来解决。下面是一个用Python编写的环形子数组最大和的完整代码示例:
```python
def maxSubarray(nums):
if not nums:
return 0
# 初始化两个变量,current_sum表示当前滑动窗口内的最大和,global_max用于保存全局最大和
current_sum = nums[0]
global_max = nums[0]
# 使用双指针i, j分别代表左边界和右边界
i = 0
j = 0
while j < len(nums):
# 如果右边界数值大于0,则将其加入当前和中
current_sum += nums[j]
# 如果当前和大于0,说明从左边界到当前位置的和最大,更新global_max
if current_sum > global_max:
global_max = current_sum
# 移动右边界,如果遇到负数,需要考虑是否应该移除左边界
while i <= j and current_sum >= 0:
current_sum -= nums[i]
i += 1
# 右边界向右移动
j += 1
return global_max
# 示例:
nums = [1, -2, 3, 10, -4, 7, 2, -5]
print(maxSubarray(nums)) # 输出:18 (对应的子数组是[1, 3, 10])
```
阅读全文