算法找到具有不同值的最短子阵列

时间:2014-12-21 10:40:16

标签: algorithm

给定一个数组A,找到一个最短的子数组A [i:j],使得A中存在的每个不同的值也存在于子数组中。

问题不在于作业。这是关于哈希表的章节中的实践问题。我不是在寻找代码。只是寻找算法或提示。

2 个答案:

答案 0 :(得分:0)

使用哈希表来维护字符串中每种元素的计数。

找到新类型的元素时 所有以前的回答answere ans staert修剪子串的开始, 如果没有一种元素的零,你可以不再修剪它 记住子字符串,如果它是最短的但又找到了另一个元素来替换你将要松散的元素,或者找到一个之前未见过的新元素

当你点击字符串的结尾时就完成了。

如果你的哈希是好的,那应该是O(n)

答案 1 :(得分:0)

1-维护哈希表元素 - >计数

2-从开始到结束的遍历数组,递增元素计数。每当元素计数从0更改为1时,将其索引记录在变量中,例如index_0_1。最后,index_0_1将具有潜在的ans的结束索引。

3-从开始到index_0_1的遍历数组,递减元素计数。停止,每当元素计数从1更改为0时,将其记录在变量中,例如index_1_0。子阵列A [index_1_0:index_0_1]是一个潜在的ans,记录它。

4-从index_0_1到end的遍历,递增元素计数并在找到元素A [index_1_0]时停止。使用当前索引更新index_0_1。

5-从index_1_0 + 1遍历index_0_1,递减元素计数。每当元素计数从1更改为0时停止。这是新的index_1_0。如果子数组A [index_1_0:index_0_1]小于先前的ans,则更新它并继续执行步骤4和步骤5,直到遍历整个数组。