包含所有元素而不使用数组的最短子数组?

Shortest subarray containing all elements without using arrays?

问题:找到包含所有元素的最短子数组的长度 示例:1 2 2 3 2 2 1 3 答案:3

我了解到解决此问题的最佳方法是使用滑动 window 方法。但是这种方法需要使用数组。有没有其他不需要通过存储每个元素的出现次数来使用数组的有效方法? (我想通过在 ML 中编写它来使用这种没有数组的方法)

我不明白你的数组问题。您没有指定您使用的是哪种 ML 系列语言,但 Ocaml(我最喜欢的语言)肯定有数组。如果出于某种宗教原因你真的不喜欢数组,你总是可以使用带有整数键的 Map,它的作用与数组相同,但速度要慢得多。

我假设您想避免使用数组的原因是您想编写 惯用的 ML 代码,因此更愿意使用纯函数式数据结构而不是可变数组?

如果是这样,那么您可以将 purely functional red-black tree 用于 "sliding-window" 方法,几乎​​与使用数组的方式完全相同;唯一的区别是:

  • 不是 O(1) 次查找,而是 O(log m)查找,其中 m 是不同元素的数量。
  • 不是 O(1) 个突变,而是 O(log m)转换,其中转换 returns 地图的修改副本(共享其大部分节点)。