📌  相关文章
📜  给定链表中的最大和连续节点(1)

📅  最后修改于: 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 存储动态规划状态。