剑指 Offer 56 - II. 数组中数字出现的次数 II
难度:middle\color{orange}{middle}middle
在一个数组 numsnumsnums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7]
输出:1
限制:
考虑数字的二进制形式,对于出现三次的数字,各 二进制位 出现的次数都是 3 的倍数。
因此,统计所有数字的各二进制位中 1 的出现次数,并对 3 求余,结果则为只出现一次的数字

以二进制形式看待数据,只有一个数出现了一次,其他数都出现了三次
将每一位为1的位累加,再%3,就是只出现一次的数。
时间复杂度:O(n)O(n)O(n),其中 nnn 是数组的长度。
空间复杂度 : O(1)O(1)O(1)
class Solution {
public:int singleNumber(vector& nums) {vector a(32);for (int num : nums) {for (int i = 0; i < 32; i ++) if ((num >> i & 1) == 1) a[i] = (a[i] + 1) % 3;}int res = 0;for (int i = 0; i < 32; i ++) {if (a[i] == 1) res = res | (1 << i);}return res;}
};
上一篇:信息系统基本知识(六)
下一篇:移动通信(16)信号检测