原题:给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。
样例:给出[1,2,2,3,4,4,5,3],返回1和5
既然我们已经解决了2*n+1的问题,现在我们看到这个题,可以往那边去想,把这个题目分解为2*n+1问题
vector singleNumberIII(vector & nums){ int t = 0; for(int i = 0; i < nums.size(); i++) { t ^= nums[i]; } int mask = t & ~(t-1); //mask的作用是分组,找到t最后一位非0的位, //该位为1的是一组,为0的是一组,这样就转化为了 //我们熟悉的2*n+1问题 int x = 0; int y = 0; for(int j = 0; j < nums.size(); j++) { if(nums[j] & mask) { x ^= nums[j]; } else { y ^= nums[j]; } } return vector {x,y};}