给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。
如:{1,2, 1, 2, 1, 2, 7}, 找出7.
格式:
第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。
要求:
你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~
样例输入:
4
0 0 0 5
样例输出:
5
刚一看完题目的时候觉得挺简单的啊,但是简单一算不符合最后线性时间复杂度的要求,一般的话要么是用时间换空间,要么是空间换时间,可是现在两者都挺苛刻的,如我无能为力,兼顾不了两者,所以在两者之间取了平衡。代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int key;
int count;
} Node;
int main(void) {
int n, i,j;
Node*node;
scanf("%d",&n);
node =(Node *) malloc (n * sizeof(Node));
if (!node)
return0;
for (i =0; i < n; i++) {
scanf("%d",&node[i].key);
node[i].count= 1;
}
for (i =0; i < n; i++) {
if(node[i].count != 0) {
for(j = i+1; j < n; j++) {
if(node[i].key == node[j].key) {
node[i].count= node[j].count = 0;
}
}
}
}
for (i =0; i < n; i++) {
if(node[i].count== 1) {
printf("%d",node[i].key);
break;
}
}
free(node);
return 0;
}