我想编写一个获取int 数组的方法,如果数组中的数字只在数组中出现一次,则返回true 。 我怎么能在最低的运行时间和空间使用情况下做到这一点?
谢谢大家
答案 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也是一种选择。