【白话经典算法系列之十七】 数组中只出现一次的数

。因此通过统计二进制上每位1的个数就可以推断出x在该位置上是0还是1了,这样就能计算出x了。

推广一下,所有其他数字出现N(N>=2)次,,而一个数字出现1次都可以用这种解法来推导出这个出现1次的数字。

示范代码如下:

// 【白话经典算法系列之十七】数组中只出现一次的数// by MoreWindows( ) // 欢迎关注#include <stdio.h>#include <string.h>int FindNumber(int a[], int n){ int bits[32]; int i, j; // 累加数组中所有数字的二进制位 memset(bits, 0, 32 * sizeof(int)); for (i = 0; i < n; i++)for (j = 0; j < 32; j++)bits[j] += ((a[i] >> j) & 1); // 如果某位上的结果不能被整除,则肯定目标数字在这一位上为 int result = 0; for (j = 0; j < 32; j++)if (bits[j] % 3 != 0)result += (1 << j); return result;}int main(){ printf(" 【白话经典算法系列之十七】数组中只出现一次的数\n"); printf(" — by MoreWindows( ) –\n"); printf(" — — \n\n"); const int MAXN = 10; int a[MAXN] = {2, 3, 1, 2, 3, 4, 1, 2, 3, 1}; printf("%d\n", FindNumber(a, MAXN)); return 0;}

旅行,不要害怕错过什么,

【白话经典算法系列之十七】 数组中只出现一次的数

相关文章:

你感兴趣的文章:

标签云: