如何搜索包含相同数量0
和{{1的1
s,2
和1
的数组中的所有间隔}} s?
示例:
2
将返回3个间隔
[0,1,1,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"
从这里开始,很容易找到匹配计数。 每对匹配计数为您提供子串的索引,它们的数量为A
和B
。您有三对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