只出现一次的数字-简单

难度:简单

题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例:

输入: [4, 1, 2, 1, 2];
输出: 4;
1
2


解题思路:
利用哈希表,遍历数组,若在表中无当前值,则存入表中,出现重复值,则从表中删除

var singleNumber = function (data) {
  let a = new Map();
  let i = 0;
  while (i < data.length) {
    if (!a.has(data[i])) {
      a.set(data[i], data[i]);
    } else {
      a.delete(data[i]);
    }
    i++;
  }
  return [...a.keys()][0];
};
1
2
3
4
5
6
7
8
9
10
11
12
13


异或运算的性值:0^N = N N^N = 0
所以出现偶数次得数异或后为0;
遍历数组,与0异或剩下的数字即为出现奇数次的数
var singleNumber = function (arr) {
  var eor = 0;
  for (var i = 0; i < arr.length; i++) {
    eor ^= arr[i];
  }
  return eor;
};
1
2
3
4
5
6
7
最后更新时间: 4/29/2020, 8:20:39 PM