Pit*_*kos 2 algorithm items list unique count
怎么会有人继续计算列表中唯一项目的数量?
比如说我有{1,3,3,4,1,3},我想得到数字3,表示列表中唯一项目的数量(即| A | = 3,如果A = {1,3 ,4}).有人会使用什么算法?
我试过一个双循环:
for firstItem to lastItem
  currentItem=a
  for currentItem to lastItem
    currentItem=b
    if a==b then numberOfDublicates++
uniqueItems=numberOfItems-numberOfDublicates
这不起作用,因为重复次数比实际需要的次数多.在开头的例子中,它将是:
关于如何解决这个问题的任何想法?
SLa*_*aks 11
将项添加到HashSet,然后在完成后检查HashSet的大小.
假设你有一个很好的哈希函数,那就是O(n).
您可以检查该号码后面是否有任何重复项.如果不增加uniqueCount:
uniqueCount = 0;
for (i=0;i<size;i++) {
  bool isUnique = true;
  for (j=i+1;j<size;j++)
     if (arr[i] == arr[j] {
       isUnique = false;
       break;
     }
  }
  if(isUnique) {
    uniqueCount ++;
  }
}
上述方法是O(N^2)在时间和O(1)空间上.
另一种方法是对输入数组进行排序,将重复元素放在一起,然后查找相邻的数组元素.这种方法是O(NlgN)在时间和O(1)空间上.
如果允许您使用额外的空间,则可以使用哈希在O(N)时间和O(N)空间上完成此操作.散列的关键是数组元素,值是它们的频率.
在散列结束时,您只能获得具有值的散列键的计数1.