给你一个随机数列表,在不交换任何数字位置的情况下,你能把它分成两半,使总和相等吗?在Python上

问题描述 投票:0回答:1

一般来说,我考虑过使用 sum() 但我一般都很难解决。我没有太多要详细说明的内容,因此为了满足问题正文要求,我将输入这句话并祈祷我写得足够多。这还不够,这太悲伤了。请问为什么我要为正文写这么多,我们需要降低对问题的要求 smh

python arrays algorithm sorting
1个回答
0
投票

如果你想在 O(n) 内完成这个问题(朴素算法是 O(n * n))那么你必须使用前缀和。这是伪代码:

for i: 1 -> n:
    prefix_sum[i] = prefix_sum[i - 1] + a[i]

for i: 1 -> n:
    if (prefix_sum[i] - prefix[0]) == (prefix_sum[n] - prefix_sum[i - 1]):
        print(i)
© www.soinside.com 2019 - 2024. All rights reserved.