什么是连续子数组?

11

我正在尝试学习连续子数组,但我找不到任何解释这个概念的学习材料。

但是我发现有一个例子是这样说的:给定数组[-2,1,-3,4,-1,2,1,-5,4],连续子数组是[4,-1,2,1]

是否有人可以解释一下他们根据什么说连续子数组是[4,-1,2,1]?

5个回答

12

这不是连续的子数组,有很多。它只是一个没有跳过任何元素的子序列。例如,[-2, 1]、[-2, 1, -3]和[2, 1, -5]都是该数组的连续子数组,但[2, 1, 4]不是。


1
还不是很清楚。子数组=“数组的任何部分或部分”,连续=“共享公共边界; 接触”。 连续是指数组索引还是值? 请解释一下您提供的三个子数组究竟是什么连续的。 - Geordie
@Geordie 对于索引,我不确定如何让它更清晰,除了“一个不跳过任何元素的子序列”之外。 - Alexey Romanov
我的回答在计算机科学上有一个更大的帖子:https://cs.stackexchange.com/questions/43303/what-is-a-contiguous-subarray/149711?noredirect=1#comment313804_149711 我会在这里写更多的答案。 - Geordie

7

连续子数组是指一个数组的子数组,该子数组的元素必须与数组中的元素序列完全一致。 例如,如果数组是[1,2,3,4,5],那么[1,3,5]是该数组的子数组,但不是连续子数组,因为跳过了元素2和4。 [1,2,3]将是其中的一个连续子数组。


3
注意: 我保留了原始答案和额外的思考: https://cs.stackexchange.com/questions/43303/what-is-a-contiguous-subarray/149711?noredirect=1#comment313804_149711 实际上,连续子数组的定义(如其他人所回答)是在给定数组中任何一系列连续元素的子序列,即它们的索引是连续的。
因此,对于 [1,2,3,4,5,6]:
[1,2,3]、[3,4]、[3,4,5,6] 都是有效的连续子数组。可以使用任何算法来生成子数组。 个人注释:令我困惑的是大多数解释要么使用或参考特定的问题或条件集来生成子数组,但大多数并没有明确说明问题与连续子数组的定义之间没有直接关系。
对我来说就像是问:
问:“+”是什么?
答:“4+4=8”
我:“好的,所以我只能用+和4,明白了。”
我看到了像这样的答案:
基本上,连续数组的总和必须更大。如果你尝试将数组的所有元素加起来,它将给你最低的总和,但是如果你在连续性中添加此特定范围,你将得到我们可以从该数组中得到的最大总和。
它是指某些使用连续子数组的特定问题,但没有人明确指出这一点,因此对于新手来说,您可能会推断出连续子数组具有进一步的含义。
这就是我的大脑理解该定义的方式,希望能对其他人有所帮助。

我认为你误解了。这些不是“使子数组连续的条件”; 相反,子数组必须是连续的(按照我的答案或 https://cs.stackexchange.com/a/43305 中描述的意义)_并且_满足一些附加条件。 - Alexey Romanov

1

为了快速获取:

从给定数组[0,...,n]中切出的任何子数组,保持其中元素的原始连续顺序。

它从选择的索引元素开始,其索引在0到n-1之间,并以其他高于起始元素的选择元素结束。

包含所选范围内的所有索引元素。

[-2,1,-3,4,-1,2,1,-5,4]的索引为[0,1,2,3,4,5,6,7,8]
[4,-1,2,1]是一个连续的子数组,其范围索引为:[3,...,6]


-4

基本上,连续数组的总和必须更大。如果您尝试将数组的所有元素相加,它将给出最低的总和,但是如果您在连续性中添加此特定范围,则可以获得我们可以从此数组中制作的最大总和。


1
目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接