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

时间:2019-03-27 14:40:58

标签: arrays algorithm functional-programming ml

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

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

2 个答案:

答案 0 :(得分:1)

我假设您要避免使用数组的原因是您要编写 idiomatic ML代码,因此宁愿使用纯函数数据结构而不是可变数组? >

如果是这样,则可以将purely functional red-black tree用于“滑动窗口”方法,其方式几乎与使用数组相同。唯一的区别是:

  • 不是 O (1)查找,而是具有 O (log m )查找,其中 m 是不同元素的数量。
  • 您具有 O (log m )转换,而不是 O (1)突变,其中转换返回的是地图(共享大部分节点)。

答案 1 :(得分:-3)

我不了解您的数组问题。您没有指定要使用的ML系列语言,但是Ocaml(我最喜欢的语言)当然具有数组。如果您出于某种宗教原因确实不喜欢数组,则可以始终使用带有整数键的Map,该键的作用与数组相同,但速度要慢得多。