前言
来啦老铁!
今天记录一下最近遇到的 1 个算法相关的题目,或者叫小编程题吧,一起来瞅一瞅吧~
题目
有一个非空整形数组,除了有一个只出现过一次的数,其他的数都出现且只出现过两次,现要求找出这个只出现过一次的数。
例如:[1,3,17,3,1]
答案:17
不聪明的解答
(async () => {
const data = [1, 3, 17, 3, 1];
for (let i = 0; i < data.length - 1; i++) {
let sameNum = 0;
for (let j = i + 1; j < data.length; j++) {
if (data[i] == data[j]) {
sameNum += 1;
continue;
}
}
if (sameNum == 0) {
console.log(data[i]);
break;
}
}
})();
聪明的解答
(async () => {
const data = [1, 3, 17, 3, 1];
let n = 0;
for (let i = 0; i < data.length; i++) {
n ^= data[i]
}
console.log(n);
})();
原理:可以使用异或或来解决这个问题,因为两个相同的数异或之后就是0,0与一个数异或还是这个数,而且异或满足交换律;
额,这个还真想不到,是得学习一下~
如果本文对您有帮助,麻烦动动手指点点赞?
谢谢!







网友评论