leetcode 137. 只出现一次的数字 II

链接:137. 只出现一次的数字 II

leetcode 137. 只出现一次的数字 II_第1张图片

代码:

class Solution {
    public int singleNumber(int[] nums) {
        int ret=0;  //代表返回的元素

        //统计数组中所有数据在 i 比特位上的总和
        for(int i=0;i<32;i++){
            int sum=0;

            for(int num:nums){
                if(((num>>i)&1)==1){
                    // i 比特位上的数是 1
                    sum++;
                }
            }

            //设置单元素 i 比特位上的数字
            if(sum%3==1){
                ret|=(1<

题解:

        解决本题就要合理运用题目给出的条件:nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。

        由上述条件我们知道,nums 数组中要是没有这单独的数字,那么里面的数都是 3 个,这也就代表每个比特位的数据总和都是 3 的倍数,在 nums 数组中有一个单独的数字就会导致每个比特位的总和 % 3 会有余数,这个余数就是单独的数字在 i 比特位上的数据。

        通过上述方法,依次获取单独的数字在每一个比特位上的数据,我们便得到了要找的单独的数字。

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)