ソードフィンガーオファーインタビュー質問56-2:配列内で1回だけ表示される唯一の数値(ビット演算、有限状態オートマトン)

この質問は前の質問のバリエーションであり、ビット演算でもありますが、XORであろうとXORであろうと、問題を解決することはできません。解決策を考えて答えを読むことはできません。

答えは、他の数字は3回出現するので、すべての数字の各桁の対応する値を合計すると、3で割り切れる値は、1回だけ出現する数字の値がこれであることを意味します1つ0、それ以外の場合は1。

 

しかし、より簡潔な答えは、leetcode、有限状態オートマトン(https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii- lcof / solution / mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4 /

私のコード、コードを書くのは難しくありません

    public int singleNumber(int[] nums) {
        int[] bit_value = new int[32];
        for(int count  = 0;count<32;count++){
            bit_value[count] = 0;
        } 

        for(int count = 0;count<nums.length;count++){
            int residual = nums[count];
            for(int count_bit = 0;count_bit<32;count_bit++){
                int value = residual%2;
                residual = residual/2;
                bit_value[count_bit] += value;
                if(residual == 0){
                    break;
                }
            }
        }
        int res = 0;
        int value = 1;
        for(int count_bit = 0;count_bit<32;count_bit++){
            if(bit_value[count_bit]%3 != 0){
                res += value;
            }
            value *= 2;
        }
        return res;
    }

 

回答コード

    public int singleNumber(int[] nums) {
        int ones = 0, twos = 0;
        for(int num : nums){
            ones = ones ^ num & ~twos;
            twos = twos ^ num & ~ones;
        }
        return ones;
    }

作者:jyd
链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/solution/mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

おすすめ

転載: blog.csdn.net/qq_40473204/article/details/115025483