美文网首页每日一道算法题
只出现一次的数字 II

只出现一次的数字 II

作者: 那个阳光下奔跑的少年 | 来源:发表于2021-05-25 10:00 被阅读0次

    给你一个整数数组 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;
    
        }
    

    相关文章

      网友评论

        本文标题:只出现一次的数字 II

        本文链接:https://www.haomeiwen.com/subject/husqsltx.html