【发布时间】:2020-08-30 00:50:27
【问题描述】:
这个问题是我很久以前问过的another one的后续问题:
给定一个整数数组和另一个数字 k,我们需要找到总和等于 k 的连续子数组的总数。例如,对于输入:
[1,1,1]和k=2,预期输出为2。
在accepted answer,@talex 中说:
PS:顺便说一句,如果所有值都是非负数,那么会有更好的算法。它不需要额外的内存。
虽然当时我并没有想太多,但我现在很好奇。恕我直言,我们将需要额外的内存。如果所有输入值都是非负数,我们的运行(前缀)总和将继续增加,因此,当然,我们不需要unordered_map 来存储特定总和的频率。但是,我们仍然需要额外的内存(可能是unordered_set)来存储我们一路上得到的运行(前缀)总和。这显然与@talex 所说的相矛盾。
有人可以确认我们是否绝对确实需要额外的内存或者是否可以避免?
谢谢!
【问题讨论】:
-
我记得以前见过这个问题,所以这一定是重复的。有人能找到吗?
标签: c++ algorithm memory space-complexity