gpt4 book ai didi

arrays - 如何制定 O(N) 算法解决方案?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:33 25 4
gpt4 key购买 nike

<分区>

此问题是在 Codility 上发现的练习题,可以在此处找到示例链接。 https://codility.com/public-report-detail/

问题:我们有一个包含 N 个整数的数组——其中 0 <= N < 100,000——其中每个整数都在 -2,8XX,XXX 和 +2,8XX,XXX 之间(有符号整数范围)。挑战在于找出是否存在一个点 P,其中 P 之前所有数组值的总和等于 P 之后所有数组值的总和。

即总和(A[0] 到 A[P-1])== 总和(A[P+1] 到 A[N-1])

ex. 
A[0] = -1
A[1] = 3
A[2] = -4
A[3] = 5
A[4] = 1
A[5] = -6
A[6] = 2
A[7] = 1
P = 1 is an equilibrium index of this array, because:
A[0] = −1 = A[2] + A[3] + A[4] + A[5] + A[6] + A[7]
P = 3 is an equilibrium index of this array, because:
A[0] + A[1] + A[2] = −2 = A[4] + A[5] + A[6] + A[7]
P = 7 is also an equilibrium index, because:
A[0] + A[1] + A[2] + A[3] + A[4] + A[5] + A[6] = 0

程序可以在找到第一个可接受的 P 实例后退出。

完成挑战需要 30 分钟,显然预期的解决方案是 O(N)。我可以想到一些 O(NlogN) 的解决方案——以及一个 O(N) 的解决方案,它涉及在一次删除一个值之前对数组求和,但这不适用于每个值的极端情况是2,8XX,XXX,XXX。

我正在使用 C++,但即使是伪代码也很棒。关于处理此约束的正确算法的建议?

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