[路飞]_leetcode_剑指 Offer 56 - II. 数组中数字出现的次数

102 阅读1分钟

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

示例 1:

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

示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1

解题思路

  1. 拆数字,统计所有数字二进制位1的出现次数
  2. 将出现的次数 % 3
  3. 遍历每个还存在为1的位,计算结果

例2: [3,4,3,3], bit2 = [0, 0, 0, 0]

3: 011
4: 100
3: 011
3: 011
bit2:

将每一位都% 3得到[0, 0, 1],所以001为只出现一次的数的二进制码,计算得结果为1

代码

var singleNumber = function(nums) {
    let bit2 = new Array(32).fill(0)
    for (let x of nums) {
        for (let i = 0; x; i++) {
            if (x & 1) {
                bit2[i]++
            }
            x = x >> 1;
        }
    }
    let ans = 0;
    for (let i = 0; i < 32; i++) {
        if (bit2[i] % 3) {
            ans += 1 << i;
        }
    }
    return ans;
};