【leetcode】只出现一次的数字

26 阅读1分钟

题目

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题

示例 1:

输入: nums = [1,2,1,3,2,5]
输出: [3,5]
解释: [5, 3] 也是有效的答案。

示例 2:

输入: nums = [-1,0]
输出: [-1,0]

示例 3:

输入: nums = [0,1]
输出: [1,0]

我的思路

根据nums,得出map,key为数字,value为出现的次数,比如nums = [1,2,1,3,2,5],需要得出[[1,2],[2,2],[3,1],[5,1]],然后根据返回value为1的

题解

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var singleNumber = function(nums) {
    const numberMap = new Map();
    nums.forEach((ele) => numberMap.set(ele,numberMap.has(ele) ? 2 : 1))
    const result = [];
    numberMap.forEach((value,key) => {
        if(value===1) result.push(key)
    })
    return result;
};

image.png