背景知识:
若x是任意整数, 则有:
- x^x=0;
- x^0=x;
三道题:
-
一个数组,其中只有一个数只出现一次,其他数字均出现两次,求只出现一次的数
答:将所有数异或一遍,最终结果即所求 -
一个数组,其中有两个数只出现一次,其他数字均出现两次,求只出现一次的数
答:记只出现一次的数分别为a, b;
所有数字异或和的值为a^b!=0;
记a^b的二进制表示在inx位上为1;
数组中在inx位上为1的数字的异或和为a, 数组在inx位上为0的数字的异或和为b; -
一个数组,其中只有1个数只出现一次,其他数均出现三次;
cnt[i]记录二进制表示在i位上为1的数字的出现次数;
出现一次的数字的每一位上1出现的次数均模3等于1;
然后将模三等于1的位置为1就是答案
问题一
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=0;
for(int i=0; i<nums.size(); i++)
ans^=nums[i];
return ans;
}
};
问题二
class Solution {