leetcode 只出现一次的数字

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

示例 1:

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

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function (nums) {
    for (let i = 0; i !== nums.length; i++) {
        let isExist = false;
        for (let j = i + 1; j !== nums.length; j++) {
            if (nums[j] === nums[i]) {
                isExist = true;
                break;
            }
        }
        for (let j = i - 1; j >= 0; j--) {
            if (nums[j] === nums[i]) {
                isExist = true;
                break;
            }
        }
        if (!isExist) {
            return nums[i];
        }
    }
};

说实话,一手强烈的自我怀疑…
我自己都不知道到底对不对,丢进去他说我对就对了吗?很迷
睡觉了,终于熬到周五…

上面这个方法也太傻了,蠢到不行

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function (nums) {
    let obj = {};
    for (let i = 0; i !== nums.length; i++) {
        if (obj[nums[i]] === undefined) {
            obj[nums[i]] = NaN;
        } else {
            delete obj[nums[i]];
        }
    }
    return +Object.keys(obj)[0];
};

这是一个比较好理解的方法,看了以后就学会了

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
  let result = 0;
  nums.forEach(el => (result ^= el));
  return result;
};

这个是根本看不懂的方法,就算我百度了按位异或,我还是看不懂

posted @ 2018-07-27 00:13  zyzyzyzyzyzyzyzy  阅读(104)  评论(0编辑  收藏  举报