面试题 56 - II. 数组中数字出现的次数 II
题目描述
在一个数组 nums
中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3] 输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7] 输出:1
限制:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
解法
方法一:位运算
我们用一个长度为 32 的数组 \(cnt\) 来统计所有数字的每一位中 \(1\) 的出现次数。如果某一位的 \(1\) 的出现次数能被 \(3\) 整除,那么那个只出现一次的数字二进制表示中对应的那一位也是 \(0\);否则,那个只出现一次的数字二进制表示中对应的那一位是 \(1\)。
时间复杂度 \(O(n \times C)\),空间复杂度 \(O(C)\)。其中 \(n\) 是数组的长度;而 \(C\) 是整数的位数,本题中 \(C=32\)。
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|