只出现一次的数字-简单
难度:简单
题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例:
输入: [4, 1, 2, 1, 2];
输出: 4;
1
2
2
解题思路:
利用哈希表,遍历数组,若在表中无当前值,则存入表中,出现重复值,则从表中删除
var singleNumber = function (data) {
let a = new Map();
let i = 0;
while (i < data.length) {
if (!a.has(data[i])) {
a.set(data[i], data[i]);
} else {
a.delete(data[i]);
}
i++;
}
return [...a.keys()][0];
};
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
异或运算的性值:0^N = N N^N = 0
所以出现偶数次得数异或后为0;
遍历数组,与0异或剩下的数字即为出现奇数次的数
var singleNumber = function (arr) {
var eor = 0;
for (var i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
return eor;
};
1
2
3
4
5
6
7
2
3
4
5
6
7