只出现一次的数字(哈希表解法)
题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例2:
输入: [4,1,2,1,2]
输出: 4
解题思路:
除了一个元素出现了一次以外,其余均出现了两次,那么可以使用HashSet,将数组中的元素加入到HashSet中,在添加时,如果元素已经存在了,那么HashSet的add()方法会返回false,此时将已经存在的元素删除,到最后HashSet中只留下存在了一次的元素。
代码:
class Solution {
public int singleNumber(int[] nums) {
Set<Integer> set=new HashSet<Integer>();
for (int i = 0; i < nums.length; i++) {
boolean add= set.add(nums[i]);
if(!add){
//当添加时发现已经存在了,那么就将之前的删除掉,最后只剩下唯一的一个
set.remove(nums[i]);
}
}
for(Integer i:set){
return i;
}
return 0;
}
}
相似的解法的题目: