アルゴリズム:配列に1回のみ表示される数値


空でない整数配列が与えられ、ある要素が1回しか現れない以外は、各要素が2回現れます.それが一度しか現れなかった要素を見つけます.
説明:
あなたのアルゴリズムは線形時間の複雑さを持つべきです.余分なスペースを使わずに実現できますか?
例1:
  : [2,2,1]
  : 1

例2:
  : [4,1,2,1,2]
  : 4

タイトル元住所:
https://leetcode-cn.com/explo...
/**
 *                     Map  key,       value
 *       1         
 */
public int singleNumber(int[] nums) {
    Map map = new HashMap<>();
    for (int num : nums) {
        if (!map.containsKey(num)) {
            map.put(num, 1);
        } else {
            map.put(num, map.get(num) + 1);
        }
    }
    return map.entrySet().stream().filter(r -> r.getValue() == 1).findFirst().get().getKey();
}

/**
 *       ,      Set,                 Set   ,      ,
 *             。
 */
public int singleNumber1(int[] nums) {
    Set set = new HashSet<>();
    for (int num : nums) {
        if (!set.remove(num)) {
            set.add(num);
        }
    }
    return set.iterator().next();
}

/**
 *   (^)      :0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(  0,  1)
 *             ,       ,         0, 0      ,
 *             。
 */
public int singleNumber2(int[] nums) {
    int r = 0;
    for (int num : nums) {
        r ^= num;
    }
    return r;
}

もしあなたがもっと良い方法があれば、分かち合って、一緒に勉強して、一緒に進歩することができます.
関連記事:
並べ替え配列から重複項目を削除Javaで単純なアルゴリズムで文字列内の整数の個数を統計する
内容が悪くないと思ったら、私に注目してください.微信公衆番号:志兄(ID:zhige-me)はあなたと出会って、一緒に成長することを期待しています.