這是一個leetcode問題。 給定一個數字nums數組,其中恰好兩個元素只出現一次,其他所有元素只出現兩次。找出只出現一次的兩個元素。位操作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};
}
};
提交的結果是錯誤的答案。
Input:[0,0,1,2]
Output:[3,0]
Expected:[1,2]
但如果我只是改變高亮部分
if(differbit&i) group5=group5^i;
被接受。 我花了很多時間思考,但仍然不知道。也許某些類型轉換髮生了?謝謝