Algorithm 在O(n)中计算数组中的重复项(不一定要删除)

Algorithm 在O(n)中计算数组中的重复项(不一定要删除),algorithm,big-o,Algorithm,Big O,这是一个分配,并在psuedo代码 我需要找出数组中有多少个整数是唯一的,除此之外,它必须是O(n),最好不用散列 谢谢 只需遍历数组中的每个元素并跟踪您看到的元素,当您看到重复的元素时,报告它 另外,根据您跟踪元素的方式,它可能是O(n),也可能不是O(n),但我将把这部分留给您,您至少要了解一些东西。只要迭代数组中的每个元素并跟踪您看到的元素,当您看到重复的元素时,报告它 另外,根据您跟踪元素的方式,它可能是O(n),也可能不是O(n),但我将把这部分留给您,您至少要学习一些东西。这个伪代码

这是一个分配,并在psuedo代码

我需要找出数组中有多少个整数是唯一的,除此之外,它必须是O(n),最好不用散列


谢谢

只需遍历数组中的每个元素并跟踪您看到的元素,当您看到重复的元素时,报告它


另外,根据您跟踪元素的方式,它可能是O(n),也可能不是O(n),但我将把这部分留给您,您至少要了解一些东西。

只要迭代数组中的每个元素并跟踪您看到的元素,当您看到重复的元素时,报告它


另外,根据您跟踪元素的方式,它可能是O(n),也可能不是O(n),但我将把这部分留给您,您至少要学习一些东西。

这个伪代码呢


array randomNumbers;
array unique;
int uniqueCount = 0;

for (i in randomNumbers) {

  unique[i] += 1;
  uniqueCount++; //count all here
  // and remove duplicities here
  if (unique[i] > 1) {
    uniqueCount--;
  }
}
return uniqueCount;

前提是,未声明的唯一[i]是0,那么这个伪代码呢


array randomNumbers;
array unique;
int uniqueCount = 0;

for (i in randomNumbers) {

  unique[i] += 1;
  uniqueCount++; //count all here
  // and remove duplicities here
  if (unique[i] > 1) {
    uniqueCount--;
  }
}
return uniqueCount;


前提是,未声明的唯一性[i]是0,既然这是作业,那么到目前为止你有什么想法?当然,你不希望我们只是给你一个答案作为你自己的答案,是吗?我想我不应该。最大的问题是找到数组中的第k个最大元素,值不受限制。我使用分区和函数来寻找中间值。对于删除/计算重复项,我考虑使用线性排序,因为我知道分区左侧的值小于中位数,但最坏情况下我需要O(n),然后我考虑了哈希,但我们还没有达到这个目的。@Mosho“线性排序”-一个错误。这里有线性搜索,我想这就是他们在讲座中所说的。指基数/计数/桶排序。插入/查询哈希表是O(n)最坏的情况,因此即使允许使用哈希,它也不会有用:)那么,既然这是用于赋值,到目前为止,您有什么想法?当然,你不希望我们只是给你一个答案作为你自己的答案,是吗?我想我不应该。最大的问题是找到数组中的第k个最大元素,值不受限制。我使用分区和函数来寻找中间值。对于删除/计算重复项,我考虑使用线性排序,因为我知道分区左侧的值小于中位数,但最坏情况下我需要O(n),然后我考虑了哈希,但我们还没有达到这个目的。@Mosho“线性排序”-一个错误。这里有线性搜索,我想这就是他们在讲座中所说的。指基数/计数/桶排序。插入/查询哈希表是O(n)最坏的情况,因此即使允许哈希,也不会有用:)OMG。“跟踪”的复杂性是什么?我想你指的是某种散列?至少我是这么想的,但我认为这是不允许的。实际上,我想的更像是Moravec发布的内容,使用不同的数组来“跟踪”。还有@Andrey,你可以用这种方式跟踪元素,而不需要额外的复杂性。@Silmaril89-真的吗?好吧,我不会那么挖苦人了。O(n)表示您将对每个元素执行恒定时间操作。没有办法在恒定的时间内检查某物的跟踪。除非你以前构建过hashmap,但是构建hashmap有它自己的复杂性。@Andrey,Moravec回答的复杂性是什么?天哪。“跟踪”的复杂性是什么?我想你指的是某种散列?至少我是这么想的,但我认为这是不允许的。实际上,我想的更像是Moravec发布的内容,使用不同的数组来“跟踪”。还有@Andrey,你可以用这种方式跟踪元素,而不需要额外的复杂性。@Silmaril89-真的吗?好吧,我不会那么挖苦人了。O(n)表示您将对每个元素执行恒定时间操作。没有办法在恒定的时间内检查某物的跟踪。除非你以前构建过hashmap,但是构建hashmap有它自己的复杂性。@Andrey,Moravec的答案的复杂性是什么?@Mosho:可以使用类似的技术,这正是我最初的想法,但还不够好。@Moravec如果范围是无符号整数,你将分配4 Gbs?@Andrey,问题不在于浪费内存,而在于时间复杂性。是的,我同意,unique必须是一个巨大的数组,但它可以满足时间复杂度的要求。@Andrey:@Silmaril89回答。我们不知道数组是如何实现的。最后,您可以使用其他数据结构,如列表等。@Mosho:可以使用类似的技术,这正是我最初的想法,但还不够好。@Moravec如果范围是无符号整数,您将分配4 Gb?@Andrey,问题不是浪费内存,而是时间复杂性。是的,我同意,unique必须是一个巨大的数组,但它可以满足时间复杂度的要求。@Andrey:@Silmaril89回答。我们不知道数组是如何实现的。最后还可以使用列表等其他数据结构。