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



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

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

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

如果是这样,那么您可以使用纯函数的红黑树进行"滑动窗口"方法,其方式几乎与使用数组的方式完全相同;唯一的区别是:

  • 代替 O(1( 查找,你有 O(log m( 查找,其中 m 是不同元素的数量。
  • 不是 O(1( 突变,而是 O(log m( 变换,其中变换返回映射的修改副本(共享其大部分节点(。

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

最新更新