当前位置: 首页 > 知识库问答 >
问题:

计数给定和为零的所有相邻子数组

尹乐邦
2023-03-14
1 -1 & 2 -2 & 6 -6 & 1 -1 2 -2 & 2 -2 6 -6 & 1 -1 2 -2 6 -6

我知道强力解O(n^2),我想要另一个解O(n),还是O(n,log,n)?

共有1个答案

凌翔宇
2023-03-14

设数组为a1,…,an。设s0,...,sn是由sj=a1+...+aj(和s0=0)定义的前缀和。从i到j的子数组之和是sj-si-1。对于O(n)/O(n,log,n)-time算法,使用映射计算前缀和中每个数字的出现次数。求和k,在这个映射的值中选择2作为k。

例如,如果我们有你的数组

1 -1 2 -2 6 -6

则前缀和为

0 1 0 2 0 6 0
0: 4
1: 1
2: 1
3: 1
def countsumzero(lst):
    prefixsums = [0]
    for x in lst:
        prefixsums.append(prefixsums[-1] + x)
    freq = {}
    for y in prefixsums:
        if y in freq:
            freq[y] += 1
        else:
            freq[y] = 1
    return sum(v*(v-1) // 2 for v in freq.values())
 类似资料:
  • 所有要求要么打印最大的数组,要么打印长度最大的数组。我想打印那些连续数组的所有组合,这些数组可以被给定的数整除。我试图解决这个问题,并想出了这个解决方案 这段代码非常复杂,我可以想出一个更多的解决方案,使用两个复杂度为O(n^2)的循环。我们能以n^2倍的复杂度更好地做到这一点吗?

  • 您将获得一个包含n个元素的数组:<代码>d[0],d[1]。。。,d【n-1】。计算所有相邻子数组的最大差值之和。 形式上:S=sum{max{d[l,..., r]}-min{d[l,..., r}},Δ0 输入: 输出: 解释: l=0;r=1;数组:[1,3]和=最大值([1,3])-最小值([1,3])=3-1=2 l=0;r=2;数组:[1,3,2]和=最大值([1,3,2])-最小值(

  • 我正在寻找以下问题的答案。 给定一组整数(无重复项)和一个和,找出集合元素的所有可能组合,并求和。解的顺序并不重要(解{2,2,3}和{3,2,2}是相等的)。 请注意,最终组合不需要是集合,因为它可以包含重复。 示例:集合{2,3,5}和10 结果:{2, 2, 2, 2, 2},{2,2,3,3},{2,3,5},{5,5} 我已经研究过子集和问题以及硬币兑换问题,但不能使它们适应我的需要。我

  • 有没有一种方法可以在小于O(n^2)的时间内做到这一点。 O(nlogn)还是O(n)?

  • 问题内容: 午夜过后,也许有人知道如何解决我的问题。我想将相邻单元格的数量(这意味着具有其他值的数组字段的数量,例如数组值附近的零)作为 每个有效值的 总和 ! 。 例: 如果我的值的结构变化,我如何以这种方式计算零的数量?我以某种方式认为必须使用SciPy的binary_dilation函数,该函数能够扩大值结构,但是对重叠的简单计数不能使我得出正确的总和? 问题答案: 使用 卷积 计算邻居数:

  • 我在一次面试中被问到这个问题。 您将获得一个由 N 个整数组成的数组。您需要确定给定数组是否存在任何排列,以便长度为 K 的所有子数组之和相等。N 可被 K 整除,即 N mod K = 0。 如果数组为 [1,2,1,3,2,3] 且 K = 2,则为 False。 如果数组为 [1,2,1,3,2,3] 且 K = 3,则为 True。 我的逻辑是这样。 1) 如果 N == K,则返回 Tr