📅  最后修改于: 2023-12-03 15:41:17.781000             🧑  作者: Mango
给定一个单链表,找到其中的一段连续节点,使其节点值之和最大,返回这个最大和。
这道题可以使用动态规划来解决。定义一个一维数组 dp[i]
表示以第 i
个节点为结尾的最大连续和,那么对于第 i+1
个节点,如果 dp[i]>0
,则 dp[i+1]=dp[i]+nums[i+1]
;否则 dp[i+1]=nums[i+1]
。最后遍历数组 dp
找到最大值即可。
class Solution:
def maxSubArray(self, head: ListNode) -> int:
# 定义最大和变量
max_sum = head.val
# 定义动态规划数组
dp = [head.val]
# 遍历链表,更新动态规划数组
while head.next:
head = head.next
if dp[-1] > 0:
dp.append(dp[-1] + head.val)
else:
dp.append(head.val)
# 更新最大和变量
max_sum = max(max_sum, dp[-1])
return max_sum
时间复杂度:$O(n)$,需要遍历整个链表一遍。
空间复杂度:$O(n)$,需要额外开辟一个数组 dp
存储动态规划状态。