【问题标题】:Searching for all intervals meeting a specific condition搜索满足特定条件的所有区间
【发布时间】: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


    【解决方案1】:

    首先,为了让算法更清晰,我将把数字改为字母: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

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

    【讨论】:

      【解决方案2】:

      在原始数组中放入 -1 而不是 2。那么问题就归结为:Zero sum SubArray

      【讨论】:

      • 这正是我在比赛中最终使用的!不过谢谢。
      猜你喜欢
      • 2011-11-02
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多