【力扣】136. 只出现一次的数字 <位运算>
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1]
输出:1
示例 2 :
输入:nums = [4,1,2,1,2]
输出:4
示例 3 :
输入:nums = [1]
输出:1
提示:
1 <= nums.length <= 3 *
1
0
4
10^4
104
-3 *
1
0
4
10^4
104<= nums[i] <= 3 *
1
0
4
10^4
104
除了某个元素只出现一次以外,其余每个元素均出现两次。
题解
法一:暴力(Map)
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(Integer num : nums){
Integer count = map.get(num);
count = (count==null)?1:count++;
map.put(num,count);
}
for(Integer i : map.keySet()){
Integer count = map.get(i);
if(count == 1)
return i;
}
return -1;
}
}
位运算:
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for(Integer number :nums){
result = result^number;
}
return result;
}
}