题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
https://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> FindNumsAppearOnce(vector<int>& nums) { // write code here int axorb = 0 ; for(int i = 0;i<nums.size();i++) { axorb ^= nums[i]; } int k = 1; while((k & axorb) == 0) { k = k <<1; } vector<int> res(2,0); for(int i = 0;i<nums.size();i++) { if((k & nums[i]) == 0) { res[0] ^= nums[i]; } else{ res[1] ^= nums[i]; } } if(res[0] < res[1]){ return res; } else{ return {res[1],res[0]}; } } };
将数组中的数字分成两组,使用按位异或找出只出现一次的数字。