algorithm - 找到一维中的最短路径

标签 algorithm

在一维数组S中,可能有任意数量的元素属于集合

U:{A,B,C,D,E}  

允许重复。
示例:

S  = {E,B,D,C,A,D,A,E,E,D,B,B,A,C} 

问题是:

在任何给定数组 S 中,确定包含属于集合 U 的所有元素的最短范围/路径的最有效方法是什么?请记住,数组无法排序。

在上面的例子中,最短路径是连接数组S的前5个元素。

编辑:
1) 集合 U 的元素数不是常数。

提前致谢。

最佳答案

有趣的作业,但您仍然需要自己编写代码。

幸好你没有告诉我们你使用的是哪种语言,所以我认为这是一个标志,因为你决定自己编写代码,这很好。


到目前为止我最好的尝试:

有 2 个指针用于子字符串(范围),一个用于范围的开始(较小的索引),一个用于结束(较大的索引)。两者都先指向数组的开头。

列出范围内分别有多少 ABCDE。

从左到右迭代end

对于每个字符,增加列表中字符的编号。如果结果(递增多少)> 1(,看start是否指向同一个字符。如果是,将start向前移动并减去1, and) 当 start 指向一个字符,其相关数字大于 1 时,将 start 向前移动并减去 1。

如果列表中的 ABCDE 都 >= 1,那么我们找到了一个候选范围。将其与最短长度(如果有)进行比较,如果更小,则更新最短长度并记录新的最短范围的开始索引。

关于algorithm - 找到一维中的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650309/

相关文章:

c++ - 未排序矩阵搜索算法

algorithm - asymptotic-complexity - 计算原始操作的步骤

c - 在文本中搜索字符 block (单词)

algorithm - 纯功能集

c++ - 通过开放空间检查两个物体的连通性

c# - 递归边搜索

algorithm - 一维动态规划的懒惰打结

c - 如何在C中读取csv的特定列

python - 使用粗略的灰度算法有问题吗?

java - 计算相同项目频率的数据结构