只出现一次的数字 II

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1:

输入:nums = [2,2,3,2]
输出:3
示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

/*
    解题思路,让所有数相加,因为3个数相同,那么他们二进制位就相同,所以除以3可以整除,那么所有
    二进制位相加,逐位除以3余数就是出现1次二进制位的数字
 */
public int singleNumber(int[] nums) {
        int ans =0;
        //对每一个二进制位进行加运算
        for(int i=0;i<32;i++){
            int total=0;
            for(int num:nums){
                //提取出目标位,进行相加
                total+=(num>>i)&1;
            }
            if(total%3!=0){
                //左移是为了还原目标位
                ans|=(1<<i);
            }
        }
        return ans;

    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容