给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
思路1:根据题意,除了一个元素出现一次以外,其余的元素都出现两次,那么可以对数组中所有元素进行异或操作,最后得出来的结果就是那个唯一的元素。
代码如下:
public int singleNumber(int[] nums) {
int res=0;
for(int temp : nums){
res ^=temp;
}
return res;
}
思路2:利用hashmap。
把数组中所有元素放在hashmap中,由于hashmap的key是唯一的,所以只要确定这个key是否存在就可以判断出数组中该元素是否重复,代码如下:
//重复value为1,不重复value为0
public int singleNumber(int[] nums) {
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int temp : nums){
if(map.containsKey(temp)){
map.put(temp, 1);
}else{
map.put(temp, 0);
}
}
return getKey(map);
}
//利用value找key
public int getKey(HashMap map){
int res=0;
for(Object key: map.keySet()){
if(map.get(key).equals(0)){
res = Integer.parseInt(key.toString());
}
}
return res;
}