简单的算法问题8——单独的数字(位运算)
此算法均是用C++编写
此题目均是来做计蒜客
题目
给定一个数组 A,除了一个数出现一次之外,其余数都出现三次。找出出现一次的数。
规则
如:{1,2,1,2,1,2,7},找出 7。
你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~
输入格式
第一行输入一个数 n(1≤n≤500),代表数组的长度。
接下来一行输入 n个 int 范围内(-2147483648…2147483647)的整数,表示数组 A。保证输入的数组合法。
输出格式
输出一个整数,表示数组中只出现一次的数。
形如:
样例输入
4
0 0 0 5
样例输出
5
刨坑点
1.这道题答案的重点算法是位运算,对于我来说这道题的重点是查找,怎么才能查找出数字不是三个的那个数,我想起当年学数据结构的时候的算法了,就写了一个最简单的,在查找算法中用了一个num来计数,如果遇见相同的次数就加一,如果在数组里面数只出现了一次肯定num=1;
而其他的数字的num=3;
所以我只有挑选出num=1;
的那个肯定就是只出现一次的那个数。
代码
#include <iostream>
#include <vector>
using namespace std;
int CheckOne(vector <int> a);
bool search(vector <int> a,int n);
int main(){
int n;
cin>>n;
if(n>0&&n<501){
vector <int> a;
for(int i=0;i<n;i++){
int j;
cin>>j;
a.push_back(j);
}
cout<<CheckOne(a);
return 0;
}
}
int CheckOne(vector <int> a){
for(int i=0;i<a.size();i++){
int n=a[i];
if((search(a,n))==true){
return n;
}
}
}
bool search(vector <int> a,int n){
int num=0;
for(int i=0;i<a.size();i++){
if(a[i]==n){
num++;
}
}
if(num==1){
return true;
}
else{
return false;
}
}
测试
测试成功~!