62.数组中唯一只出现一次的数字

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

请找出那个只出现一次的数字。

你可以假设满足条件的数字一定存在。

思考题:

  • 如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?

数据范围:

数组长度 [1,1500]。
数组内元素取值范围 [0,1000]。

样例:

输入:[1,1,1,2,2,2,3,4,4,4]
输出:3

代码:

class Solution {
    public int findNumberAppearingOnce(int[] nums) {
       //创建一个32位的数组,用于统计每一位上1出现的总次数
       int[] count = new int[32];
       //遍历数组中的每个数字
       for(int i = 0;i<nums.length;i++){
           //对当前数字的每一位进行计算
           //统计当前第k位是否为1,如果是则将结果加到count数组对应位置
           for(int k = 0;k<32;k++)count[k]+=(nums[i]>>k)&1;
       }
       //初始化结果遍历
       int res = 0;
       //遍历count数组的每一位
       for(int k = 0;k<32;k++){
           //对每一位的计数结果对3取余(因为其他数字都出现3次)
           //将余数左移k位恢复到原来的位置
           //使用或运算将各位的结果组合起来
           res|=(count[k]%3)<<k;
       }
       //返回最终结果
       return res;
    }
}
posted @ 2025-06-01 09:01  回忆、少年  阅读(8)  评论(0)    收藏  举报