リートコードの問題です。 正確に2つの要素が1回だけ表示され、他のすべての要素が正確に2回表示されるnumの配列が与えられます。一度しか表示されない2つの要素を探します。ビット操作AND
例: 与えられたnums = [1,2,1,3,2,5]は、[3,5]を返します。 私のコードは次のとおりです。
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int axorb=0;
for(auto i:nums) axorb=axorb^i;
int differbit=(axorb&(axorb-1))^axorb;
int group3=0, group5=0;
for(auto i:nums)
if(differbit&i!=0) group5=group5^i;
else group3=group3^i;
return vector<int>{group3,group5};
}
};
提出結果が間違った答えです。私はちょうど
if(differbit&i) group5=group5^i;
に強調表示された部分を変更した場合
Input:[0,0,1,2]
Output:[3,0]
Expected:[1,2]
しかし、それは受け入れられています。 私は多くの時間を費やして考えましたが、まだ分かりません。たぶん、いくつかの型変換が起こったでしょうか?ありがとう