【剑指offer】连续子链表最大和 [Go语言]

164 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

题目

输入一个单链表,链表中一个或多个连续的整数组成一个子链表。求所有子链表和的最大值。

示例1

输入:

{1,-2,3,10,-4,7,2,-5}

返回值:

18

示例2

输入:

{2}

返回值:

2

示例3

输入:

{-10}

返回值:

-10

题解

其实这题和之前做的数组类似,就是一个O(n)即可!那么我们可以直接用这个来进行操作。

AC Code

func FindGreatestSumOfSubArray( head *ListNode ) int {
(1)    cur := head.Next
(2)    max := head.Val
(3)    pre := head.Val
(4)    for cur!=nil{
(5)        if pre+cur.Val>cur.Val{
(6)            pre = pre+cur.Val
        }else{
(7)            pre = cur.Val
        }
        if pre>max{
(8)            max = pre
        }
(9)        cur = cur.Next
    }
(10)    return max
}
  • (1) 获取头节点的下一个节点,用于进行遍历
  • (2) 先设置最大值为头节点的元素
  • (3) 再设置一个暂时值为头节点的元素,用于遍历时替换
  • (4) 如果这个cur的下一个不是空的话,就继续进行遍历
  • (5) 如果累加的值比前一个累加的值大
  • (6) 就累加起来
  • (7) 如果不是就不加了,就要重新开始计算了,就让这个pre等于当前的值
  • (8) 如果这个pre比最大值要大的话,就直接让max=pre
  • (9) 让cur=cur.Nex,让这个循环能不断进行遍历下去,知道cur为空,也就是已经遍历完了
  • (10) 返回最大值的结果即可