【发布时间】:2019-06-05 20:29:31
【问题描述】:
如何在包含相同数量的1s 和2s 的0s、1s 和2s 数组中搜索所有区间?
例子:
[0,1,1,2,2]
将返回 3 个间隔
[0,1,1,2,2] [1,1,2,2] [1,2]
我不想强行使用它。是否有任何非常简单的算法可用于此类实例?我需要一些灵活的东西。
【问题讨论】:
标签: algorithm intervals pascal lazarus
如何在包含相同数量的1s 和2s 的0s、1s 和2s 数组中搜索所有区间?
例子:
[0,1,1,2,2]
将返回 3 个间隔
[0,1,1,2,2] [1,1,2,2] [1,2]
我不想强行使用它。是否有任何非常简单的算法可用于此类实例?我需要一些灵活的东西。
【问题讨论】:
标签: algorithm intervals pascal lazarus
首先,为了让算法更清晰,我将把数字改为字母: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 而不是 2。那么问题就归结为:Zero sum SubArray
【讨论】: