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) 返回最大值的结果即可