描述
给出 2 * n + 1
个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
- n≤100
样例
样例 1:
输入:
A = [1,1,2,2,3,4,4]
输出:
3
解释:
仅3出现一次
样例 2:
输入:
A = [0,0,1]
输出:
1
解释:
仅1出现一次
挑战
一次遍历,常数级的额外空间复杂度
C++:
class Solution {
public:
/**
* @param a: An integer array
* @return: An integer
*/
int singleNumber(vector<int> &a) {
// write your code here
int n[101]={0};
for(int i=0;i<a.size();i++)
n[a[i]]++;
for(int i=0;i<a.size();i++)
if(n[a[i]]==1)
return a[i];
}
};
Wrong Answer 12%
41 ms时间消耗 5.50 MB空间消耗
·
C++:(map容器,没学过)
class Solution {
public:
/**
* @param a: An integer array
* @return: An integer
*/
int singleNumber(vector<int> &a) {
// write your code here
map<int,int>n;
for(int i=0;i<a.size();i++)
n[a[i]]++;
for(int i=0;i<a.size();i++)
if(n[a[i]]==1)
return a[i];
}
};
Accepted 100%
41 ms时间消耗 5.48 MB空间消耗 您的提交打败了76.40 %的提交
C++:(异或,相同数字异或运算后为0。)
class Solution {
public:
/**
* @param a: An integer array
* @return: An integer
*/
int singleNumber(vector<int> &a) {
// write your code here
int n=0;
for(int i=0;i<a.size();i++)
n^=a[i];
return n;
}
};
Accepted 100%
41 ms时间消耗 5.45 MB空间消耗 您的提交打败了76.40 %的提交
C++(不是很好理解):
class Solution {
public:
/**
* @param a: An integer array
* @return: An integer
*/
int singleNumber(vector<int> &a) {
// write your code here
int m=0;
for(int i=0;i<a.size();i++){
do{
for(int j=0;j<a.size();j++){
if(i==j)
j++;
if(a[i]==a[j]){
m=1;
break;
}
}
if(m==1){
m=0;
break;
}
return a[i];
}while(1);
}
}
};
Accepted 100%
40 ms时间消耗 5.43 MB空间消耗 您的提交打败了92.40 %的提交