classSolution: defmaxSubArray(self, nums: List[int]) -> int: n = len(nums) if n == 0: return0 dp = [0] * n dp[0] = nums[0] for i inrange(1, n): dp[i] = max(nums[i], nums[i] + dp[i - 1]) res = float('-inf') for i inrange(n): res = max(res, dp[i]) return res
classSolution: defmaxSubarraySumCircular(self, nums: List[int]) -> int: n = len(nums) if n == 0: return0
# 使用Kadane算法找到非环形子数组的最大和 max_sum = float('-inf') current_max = 0 for num in nums: current_max = max(num, current_max + num) max_sum = max(max_sum, current_max)
# 找到非环形子数组的最小和 min_sum = float('inf') current_min = 0 res = 0 for num in nums: res += num current_min = min(num, current_min + num) min_sum = min(min_sum, current_min)
# 如果最大和大于0,则比较非环形最大和与环形最大和(总和减去最小和) if max_sum > 0: returnmax(max_sum, res - min_sum) else: # 如果所有数都是负数,则返回非环形最大和 return max_sum
CONVERSATION / 留言
留言与讨论
欢迎留下想法,评论由 Waline 提供。
评论正在加载…