在java中-检查数组是否有只显示一次的数字的方法?
我想编写一个方法,获取一个int数组,如果数组中的数字只出现一次,则返回true。 如何以最低的运行时间和空间使用率做到这一点 谢谢大家创建一个,迭代数组:对于数组中的每个x:如果x不在映射中[作为键],则将(x,1)插入映射,否则:将(x,map.value(x)+1)插入映射在java中-检查数组是否有只显示一次的数字的方法?,java,Java,我想编写一个方法,获取一个int数组,如果数组中的数字只出现一次,则返回true。 如何以最低的运行时间和空间使用率做到这一点 谢谢大家创建一个,迭代数组:对于数组中的每个x:如果x不在映射中[作为键],则将(x,1)插入映射,否则:将(x,map.value(x)+1)插入映射 迭代映射,查找是否有值为1的键,如果有则返回true,否则返回false 它是O(n)时间复杂度和O(n)空间复杂度 伪代码: hasUnique(array): map <- new hashMap
迭代映射,查找是否有值为1的键,如果有则返回true,否则返回false 它是
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
hasinque(数组):
map我可能会尝试对数组进行排序(qsort算法非常快),然后在数组上迭代一次,然后找到左右不相同的元素
您还可以将元素放入哈希映射,其中键是元素和值-出现次数
//编辑:
正如阿米特所说,哈希集也是一个选项。这是家庭作业吗?你想到了什么策略?最好用例子解释一下。。。如果数组是{1,2,3,4,5},{1,2,3,4,5,2},如果一个算法有O(n)个运行时间和O(1)个空间复杂度,另一个算法有O(1)个运行时间和O(n)个空间复杂度,那么哪个算法的运行时间和空间使用率最低呢?@LuchianGrigore:很好的一点,我自己说得再好不过了。空间复杂度呢?是O(n)。@aix:我编辑过,一开始我误读了这个问题。卢钦:这确实是O(n)空间的复杂性。