解决本题 可以采用2种方法
第一 如下。
第二 采用 位运算的方法
单独的数字
给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。
如:{1, 2, 1, 2, 1, 2, 7}, 找出7.
格式:
第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。
要求:
你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~
样例输入
4 0 0 0 5
样例输出
5
1 #include"iostream" 2 #define MAX 100000 3 using namespace std; 4 5 int main() 6 { 7 int n,tag,a[MAX]; 8 scanf("%d",&n); 9 for(int i=0;i<n;i++) 10 { 11 scanf("%d",&a[i]); 12 } 13 14 for(int i=0;i<n;i++) 15 { 16 tag=0; 17 for(int j=0;j<n;j++) 18 if(a[i]==a[j]) 19 tag++; 20 if(tag==1) 21 printf("%d",a[i]); 22 } 23 2425 }
第二种方法
#include<iostream> using namespace std; int main(){ int n; cin >> n; int b[32] = {}; int a; while(n--){ cin >> a; for(int i = 0; i < 32; ++i){ if(a & (1 << i)){ b[i] = (b[i] + 1) % 3; } } } int res = 0; for(int i = 0; i < 32; ++i){ res += b[i] *(1 << i); } cout << res << endl; }