Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 求包含数组/向量所有元素的最小子数组长度的算法_Arrays_Algorithm_Distinct Values_Sub Array - Fatal编程技术网

Arrays 求包含数组/向量所有元素的最小子数组长度的算法

Arrays 求包含数组/向量所有元素的最小子数组长度的算法,arrays,algorithm,distinct-values,sub-array,Arrays,Algorithm,Distinct Values,Sub Array,假设我们有一个数组{7,3,7,3,1,3,4,1}。 我需要的是一个算法(最好是一些C++代码示例),它将返回包含数组元素的最小子数组的长度。p> 在本例中,它将是5:{7,3,1,3,4},这是原始数组的最短子数组,它包含数组的所有元素,即1,3,4和7 另外,数组{2,1,1,3,2,1,1,3}的另一个示例和算法应该返回3,因为我们正在寻找的子数组是{1,3,2}(原始数组的索引2-4) 我在这里发现了一些类似的问题: 但它似乎没有得到回答 函数签名应类似于: int算法(std::ve

假设我们有一个数组{7,3,7,3,1,3,4,1}。 我需要的是一个算法(最好是一些C++代码示例),它将返回包含数组元素的最小子数组的<强>长度。p> 在本例中,它将是5:{7,3,1,3,4},这是原始数组的最短子数组,它包含数组的所有元素,即1,3,4和7

另外,数组{2,1,1,3,2,1,1,3}的另一个示例和算法应该返回3,因为我们正在寻找的子数组是{1,3,2}(原始数组的索引2-4)

我在这里发现了一些类似的问题: 但它似乎没有得到回答

函数签名应类似于:
int算法(std::vector&arr){…}
查找O(n)中的最后一个子数组:

例如,对于数组
[1,2,3,2,2,1,1]
,获取哈希表/映射(或小范围数组)中项目的计数:
{1:3,2:3,3:1}

要查找子数组的起始索引,请从数组中的第一个值开始,并检查其计数是否大于1。如果其计数大于1,则将其计数减少1,然后继续下一个值,直到计数为1的值。向后重复相同操作以查找子阵列的最后一个索引:

1, 2, 3, 2, 2, 1, 1
      ^        ^
在O(n)中查找其余子阵列:

现在要检查这是否是最小子阵列,请检查它之前的子阵列。为此,在第一个索引之前搜索值为1的最后一个索引,即最后一个索引。如果找到,将第一个索引更改为它,并将最后一个索引减少一个:

1, 2, 3, 2, 2, 1, 1
^           ^
现在要查找新子阵列的最后一个索引,请在第一个索引和最后一个索引之间搜索最后一个索引处的值2,并将最后一个索引更改为该值:

1, 2, 3, 2, 2, 1, 1
^        ^  
重复此操作,直到在第一个索引和最后一个索引之间找不到最后一个索引处的值:

1, 2, 3, 2, 2, 1, 1
^     ^  
现在检查新子阵列的计数是否小于前一个子阵列的计数,如果需要,更新当前最小子阵列的索引


必须重复搜索其余子数组,直到在第一个索引之前找不到最后一个索引的值。

请查看“最长公共子序列”算法。它最初用于字符串,但也可以根据您的问题进行调整。您到底被困在哪里?你有更具体的问题吗?你在与C++进行斗争吗?您是否不确定该算法在不考虑语言的情况下如何工作?你尝试了什么?我在C++实现上很费劲。我需要C++代码,带有给定的签名,太宽了。你到底在挣扎什么?你能添加你的代码并指出你在哪里有问题吗