algorithm - 计算 split 点的数量

标签 algorithm split

我刚刚有一个关于计算整数数组中的分割点的问题,以确保两侧至少有一个重复的整数。

例如:

1 1 4 2 4 2 4 1

我们可以将其拆分为:

1 1 4 2 | 4 2 4 1

1 1 4 2 4 | 2 4 1

这样两边至少有一个'1'、'2'和'4'。

整数可以在 1 到 100,000 之间

复杂度需要 O(n)。如何解决这个问题?

最佳答案

遍历数组并构建 count[i] = i 在数组中出现的次数。只有当所有非零值的 count[i] >= 2 时,该问题才可解。您可以使用此数组来判断数组中有多少个不同的值。

接下来,进行另一遍并使用另一个数组 count2[i](或者您可以重复使用第一个数组),跟踪您何时至少访问了每个值一次。然后将该位置用作您的分割点。

示例:

1 1 4 2 4 2 4 1
count = [3, 2, 0, 4] => 3 distinct values

1 1 4 2 4 2 4 1
^ => 1 distinct value so far
  ^ => 1 distinct value so far
    ^ => 2 distinct values so far
      ^ => 3 distinct values so far => this is your split point

可能存在没有解决方案的情况,例如,如果最后一个 1 也在开头。要检测到这一点,您可以在决定拆分点后再次遍历数组的其余部分,看看您是否仍然拥有那一侧的所有值。

您可以通过使用 countcount2 数组来检测何时不再有分割点,从而避免最后一次传递。这留作练习。

关于algorithm - 计算 split 点的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613813/

相关文章:

ruby - 如何使用 Ruby 在图中查找连通分量

c++ - 在 C++ 中查找重复文件的最佳方法是什么?

algorithm - 寻找一个简单的哈希表实现示例作为引用

python - 解析具有各种特殊字符的消息并拆分为列表(re 和 regex)Python 2.7

javascript - array push 函数向数组中添加一个空索引

c# - 性能调整 C# 排列和 SHA1 代码

algorithm - 设置重复

python - 在 python 中获取用户输入的 n*n 矩阵

f# - 在F#中分割seq

python - python 中的 re.split() 与 str.split()