标签:根据 异或运算 程序 item 数组 支持 else while subject
1 class Solution { 2 public: 3 void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { 4 if(data.size() < 2) 5 return; 6 int result = 0; 7 for(int i = 0; i < data.size(); i++){ 8 result = result ^ data[i]; 9 } 10 int index = FindFirstBitIs1(result); 11 *num1 = 0; 12 *num2 = 0; 13 for(int j = 0; j < data.size(); j++){ 14 if(IsBit1(data[j], index)){ 15 *num1 ^= data[j]; 16 } 17 else{ 18 *num2 ^= data[j]; 19 } 20 } 21 22 } 23 int FindFirstBitIs1(int num){ 24 int index = 0; 25 while(((num&1) == 0) && (index < 32)){//找出第一个为1的位置,用来区分两个不同的数 26 index++; 27 num = num>>1; 28 } 29 return index; 30 } 31 bool IsBit1(int num, int index){//找出该位是否为1; 32 num = num>>index; 33 return (num&1); 34 } 35 };
另外一个题目:数组中只出现一次的数字,只有一个数字出现一次,其他数字出现了三次,如何找出?
思路:将每个数字加起来,如果该二进制位可以被三整除,则该位为0,否则为1,。
标签:根据 异或运算 程序 item 数组 支持 else while subject
原文地址:https://www.cnblogs.com/icehole/p/12114764.html