(1)问题描述:给定数组A,除了一个数出现一次外,其他的数字出现3次,求只出现一次的数字
(2)要点:不考虑只出现一次的数,在每个bit上,1和0的个数都是3的倍数。
(3)代码:
#include <stdio.h>
int main()
{
unsigned int nCases = 0;scanf("%d",&nCases);
for(unsigned int iCases = 1;iCases <= nCases;++iCases)
{
unsigned int n = 0;scanf("%d",&n);
unsigned int* data = new unsigned int[n];
for(unsigned int i = 0;i < n;++i) scanf("%d",&data[i]);
unsigned int ret = 0;
for(unsigned int ibit = 0;ibit < 32;++ibit)
{
unsigned int count = 0;
for(unsigned int i = 0;i < n;++i)
{
count += (0 != (data[i]&(1<<ibit)));
}
if(count%3) ret |= (1<<ibit);
}
printf("%u\n",ret);
delete[] data;
}
return 0;
}
(1)问题描述:给定两个有序数组A和B,其长度分别是m和n。如何求A和B构成的新数组的中位数(m = n和m != n的)
(2)要点:m = n时有logn的算法,m != n时有logm*logn的算法
(3)代码: