in java - 检查数组是否只显示一次的数字的方法?

时间:2012-01-23 11:53:30

标签: java

我想编写一个获取int 数组的方法,如果数组中的数字只在数组中出现一次,则返回true 。 我怎么能在最低的运行时间和空间使用情况下做到这一点?

谢谢大家

2 个答案:

答案 0 :(得分:1)

创建一个HashMap,迭代数组:对于数组中的每个x:如果x不在map [as key]中,则将(x,1)插入到地图中,否则:insert(x, map.value(x)+1)到地图。


迭代地图,找出是否有值为1的键,如果存在,则返回true,否则返回

O(n)时间复杂度和O(n)空间复杂度。

伪代码:

hasUnique(array):
   map <- new hashMap
   for each x in array:
       if (map.get(x) == null): map.put(x,1)
       else: map.put(x,map.get(x)+1)
   for each key in map.keySet():
       if (map.get(key) == 1) return true
   return false

因为看起来像是家庭作业,所以我把它作为读者的一个例外。

答案 1 :(得分:1)

我可能会尝试对数组进行排序(qsort算法非常快),然后迭代数组一次,找到与其左右不同的元素。

您还可以将元素放入哈希映射中,其中键是元素,值是 - 出现次数。

//编辑: 正如amit所说,HashSet也是一种选择。