JavaScriptには、1回の数値のみが空でない整数配列を与え、ある要素が1回しか現れない以外は、各要素が2回現れます.それが一度しか現れなかった要素を見つけます.


空でない整数配列が与えられ、ある要素が1回しか現れない以外は、各要素が2回現れます.それが一度しか現れなかった要素を見つけます.
説明:
あなたのアルゴリズムは線形時間の複雑さを持つべきです.余分なスペースを使わずに実現できますか?
例1:
入力:[2,2,1]出力:1例2:
入力:[4,1,2,1,2]出力:4
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/single-number著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
var singleNumber = function(nums) {
    //    
    var obj = {};
    for (var i = 0; i < nums.length; i++) {
        var item = nums[i];
        if (!obj[item]) {
            obj[item] = 1;
        } else {
            obj[item] += 1;
        }
    }
    for (var k in obj) {
        if (obj[k] == 1) {
            return k
        }
    }
    //         
    let ans = 0;
    for(const num of nums) {
        ans ^= num;
    }
    return ans;

};

^=排他演算
この演算子は主にビット演算の場合に用いられるが,通常の数でも用いることができ,バイナリの数を10進数に変換する変換過程がある.
例を挙げる
var a = 1 ^ 2;
//3
//1 -> 01
//2 -> 10
//1 ^ 2 -> 11 -> 3

var a = 3 ^ 2;
// 11 ^ 10 = 01 -> 1

どういつえんざん
演算アルゴリズムはaとb=ab+a‘b’(a’は非a)であり、すなわちaとbは同じ真であり、異なるのは偽である.