数组中数字出现的次数
数组中有两个数字只出现了一次,而其他数字出现了两次,找到这两个数字。
分析:通过异或来提高算法速度,两个相同数字的异或为0,假设只出现一次的数字为A和B,数组所有元素进行异或,可以得到值为A异或B。接下来就需要将A和B从该值中提取出来。由于A和B是两个不同的数字,则其二进制至少有一位是不同的,即可以根据该位的值是0还是1,将数组分为两拨。如该位的值为0的元素有[A,C,D,F],该位上的值为1的元素[B,E,G]。分别异或操作两个子数组,得到的值就是只出现一次。
题解参考自:
https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/9hyq1r/
class Solution {
public:
vector<int> singleNumbers(vector<