[路飞]_前端算法第三十一弹-剑指 Offer II 004. 只出现一次的数字

122 阅读1分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 **三次 。**请你找出并返回那个只出现了一次的元素。

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

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

JavaScript特性

我们可以先将数组排序,这样相同的数字会平在一起,我们再看有哪个数字是和左右两边的数字都不一样的。

var singleNumber = function(nums) {
    nums = nums.sort()
    let len = nums.length
    if(nums[len-1]!=nums[len-2]) return nums[len-1]
    for(let i=1;i<len;i+=3){
        if(nums[i-1]!=nums[i]) return nums[i-1]
    }
};

哈希表

我们可以使用哈希映射统计数组中每个元素的出现次数。对于哈希映射中的每个键值对,键表示一个元素,值表示其出现的次数。

在统计完成后,我们遍历哈希映射即可找出只出现一次的元素。

var singleNumber = function(nums) {
    const freq = new Map();
    for (const num of nums) {
        freq.set(num, (freq.get(num) || 0) + 1);
    }
    let ans = 0;
    for (const [num, occ] of freq.entries()) {
        if (occ === 1) {
            ans = num;
            break;
        }
    }
    return ans;
};