搜索满足特定条件的所有间隔

时间:2019-01-10 22:14:58

标签: algorithm intervals pascal lazarus

如何搜索包含相同数量0和{{1的1 s,21的数组中的所有间隔}} s?

示例:

2

将返回3个间隔

[0,1,1,2,2]

我不想强行使用它。是否有任何非常简单的算法可用于此类实例?我需要一些灵活的东西。

2 个答案:

答案 0 :(得分:2)

首先,为清楚起见,我将数字改为字母:Z,A,B。现在可以将输入表示为简单的字符串:“ ZAABB”。同样为了清楚起见,我将在每个位置插入一个句点,以空格为间隔:“。Z.A.A.B.B。”。

这是一个符号平衡问题,很容易处理。遍历数组,跟踪每个位置的多余部分。 Z不会更改计数; A个增量; B递减。这给了我们

"00011221100".  

现在,提取备用计数,每个“间隔”处的计数,句点:

".Z.A.A.B.B."
"0 0 1 2 1 0"

从这里开始,很容易找到匹配计数。 对匹配计数为您提供子串的索引,它们的数量为AB。您有三对0个匹配项和一对1个匹配项,产生了子字符串

0 0 1 2 1 0” Z

0 0 1 2 1 0 ” Z A A B B

“ 0 0 1 2 1 0 ” A A B B

“ 0 0 1 2 1 0” A B

是否足够清晰,您可以实施?

答案 1 :(得分:1)

在原始数组中输入-1而不是2。然后,问题将简化为:Zero sum SubArray