LeetCode LCR 004. 只出现一次的数字 II
题目描述
思路分析
解法一:位计数(推荐)
核心思路:
- 对每一位统计所有数字该位的 1 的个数。
- 对 3 取模后剩下的就是只出现一次数字该位的值。
- 32 位重建结果,注意处理负数。
复杂度分析:
- 时间复杂度:O(32n),其中 n 表示数组长度。
- 空间复杂度:O(1)。
// 位计数重建结果
class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for (int bit = 0; bit < 32; bit++) {
int count = 0;
for (int x : nums) {
count += (x >> bit) & 1;
}
if (count % 3 != 0) {
res |= (1 << bit);
}
}
return res;
}
}
// 位计数重建结果
func singleNumber(nums []int) int {
var res int32
for bit := 0; bit < 32; bit++ {
count := 0
for _, x := range nums {
if (x>>bit)&1 == 1 {
count++
}
}
if count%3 != 0 {
res |= 1 << bit
}
}
return int(res)
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 136. 只出现一次的数字 | 简单 | 位运算 |
| 260. 只出现一次的数字 III | 中等 | 位运算 |
| 137. 只出现一次的数字 II | 中等 | 位运算 |
| 268. 丢失的数字 | 简单 | 位运算 |
| 389. 找不同 | 简单 | 位运算 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!