[路飞]_leetcode刷题_剑指 Offer II 004. 只出现一次的数字

117 阅读1分钟

题目

剑指 Offer II 004. 只出现一次的数字

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

示例 1:

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

示例 2:

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

解法一

思路

哈希表。

遍历一遍nums数组,在哈希表中记录下每个元素出现的次数。

再遍历一遍哈希表,看看哪个元素出现次数是1,则返回。

代码如下

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    let map = new Map();
    for(let i=0;i<nums.length;i++){
        if(!map.has(nums[i])){
            map.set(nums[i],1)
        }else{
            map.set(nums[i],map.get(nums[i])+1)
        }
    }
    let res = '';
    for(let i of map){
        if(i[1] == 1){
            res = i[0]
        }
    }
    return res;
};

复杂度分析

时间复杂度:O(n)

空间复杂度:O(n)

解法二

思路

位运算,这个后面再研究吧。。。