gpt4 book ai didi

algorithm - 给定一个循环链表,找到一个合适的头,使得值的运行总和永远不会为负

转载 作者:行者123 更新时间:2023-12-04 12:31:53 25 4
gpt4 key购买 nike

我有一个整数链表。例如:

-2 → 2
↑ ↓
1 ← 5

如何找到合适的起点,使运行总和始终保持非负数?

例如:

如果我选择 -2 作为起点,我在第一个节点的总和将为 -2。所以这是一个无效的选择。

如果我选择 2 作为起点,则运行总和为 2、7、8、6,它们都是正数。这是一个有效的选择。

蛮力算法就是把每个节点都挑出来做head计算,返回满足条件的节点,但是是O(𝑛²)。

这可以用 O(𝑛) 或更好的时间复杂度来完成吗?

最佳答案

假设您开始在某个头节点进行运行求和,最终达到和变为负数的点。

显然,您知道您开始的头节点作为问题的答案是无效的。

而且,您还知道贡献该总和的所有节点都是无效的。您已经检查了该子列表的所有前缀,并且您知道所有前缀的总和都是非负的,因此从总和中删除任何前缀只会使其更小。另外,当然,你最后添加的节点必须是负的,你不能启动它们。

这导致了一个简单的算法:

  • 在头节点开始累加和。
  • 如果它变成负值,则丢弃您查看过的所有节点并从下一个节点开始
  • 当总和包括整个列表(成功)或当您丢弃列表中的所有节点(无答案存在)时停止

关于algorithm - 给定一个循环链表,找到一个合适的头,使得值的运行总和永远不会为负,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68516027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com