简单的算法问题8——单独的数字(位运算)

来源:互联网 发布:爬山虎公司知乎 编辑:程序博客网 时间:2024/06/11 10:26

简单的算法问题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;    }}

测试

这里写图片描述

测试成功~!