在一维数组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/