前言
來(lái)啦老鐵!
今天記錄一下最近遇到的 1 個(gè)算法相關(guān)的題目,或者叫小編程題吧,一起來(lái)瞅一瞅吧~
題目
有一個(gè)非空整形數(shù)組,除了有一個(gè)只出現(xiàn)過(guò)一次的數(shù),其他的數(shù)都出現(xiàn)且只出現(xiàn)過(guò)兩次,現(xiàn)要求找出這個(gè)只出現(xiàn)過(guò)一次的數(shù)。
例如:[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);
})();
原理:可以使用異或或來(lái)解決這個(gè)問(wèn)題,因?yàn)閮蓚€(gè)相同的數(shù)異或之后就是0,0與一個(gè)數(shù)異或還是這個(gè)數(shù),而且異或滿足交換律;
額,這個(gè)還真想不到,是得學(xué)習(xí)一下~
如果本文對(duì)您有幫助,麻煩動(dòng)動(dòng)手指點(diǎn)點(diǎn)贊?
謝謝!