LeetCode LCR 004. 只出现一次的数字 II

题目描述

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. 找不同 简单 位运算
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/95955037
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!