找数组中单两个单次出现的数

    xiaoxiao2023-10-03  169

    编程实现: 一个数组中只有两个数字是出现一次,

    其他所有数字都出现了两次。

    找出这两个只出现一次的数字,编程实现。

    #include <stdio.h> void findnum(int * src, int n ,int* pnuml, int* pmun2) {  int i;  int sum = 0;  for (i = 0; i < n; i++)  {   sum ^= src[i];//一个数连续异或两次不变,故可得只出现一次的这两个数的异或结果  }  int pos;//想通过pos找到只出现了一次的两数异或为1的位置  int num1 = 0, num2 = 0;  for (pos = 0; !(sum & 1 << pos); pos++);//1左移pos位和sum进行与操作  for (i = 0; i < n; i++)  {   if (src[i] & 1 << pos)//根据将数组元素分组,此时所找的两个数并不在同一组   {    num1 ^= src[i];//组内异或找只出现了一次的数   }   else   {    num2 ^= src[i];   }  }  *pnuml = num1;  *pmun2 = num2;//反赋值回去 } int main() {  int arr[] = { 5, 3, 9, 1, 7, 5, 4, 7, 4, 2, 9, 2 };  int num1, num2;  findnum(arr, sizeof(arr) / sizeof(arr[0]), &num1, &num2)   return 0; }
    最新回复(0)