学习记录1道算法题 - 寻找孤立数

2023-09-12  本文已影响0人  狄仁杰666

前言

来啦老铁!

今天记录一下最近遇到的 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与一个数异或还是这个数,而且异或满足交换律;

额,这个还真想不到,是得学习一下~

如果本文对您有帮助,麻烦动动手指点点赞?

谢谢!

上一篇 下一篇

猜你喜欢

热点阅读