【LeetCodeゼロブラシから】Single Number II


タイトル:
Given an array of integers, every element appears three times except for one. Find that single one.
回答:
偶数以外の数の要素を選択する場合は、各要素が順次排他的に加算される方法を使用します.しかし奇数でない回数(3,5,7,9......)の要素?
急げばいいのにmapストレージ.そしてhash_を巡るmapはSingle Numberを見つけた.
考え方を変えて、ビット別に異なるSingle Numberに対応するビットを探します.詳細:
  • bit = 1 << i; そして、現在数とbitビットとを用いて、結果に基づいて、現在数のi番目のビットが1であるか否かを判断する.
  • 最終結果i番目の位置を1とし、ビットまたは操作可能:ans|bit.
  • class Solution {
    public:
        int singleNumber(int A[], int n) {
            int bit, bitsum;
            int ans;
            for(int i = 0; i < 32; i++)
            {
                bit = 1 << i;
                bitsum = 0;
                for(int j = 0; j < n; j++)
                {
                    if(bit & A[j]) bitsum++; 
                }
                
                if(bitsum % 3)  ans = ans | bit;
            }
            return ans;
        }
    };