每日一道算法题

只出现一次的数字 II

2021-05-25  本文已影响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;

    }
上一篇 下一篇

猜你喜欢

热点阅读