由360酷派打仗看手机行业多事之秋# PDA - 掌中宝
m*a
1 楼
Given an array of integers, every element appears three times except for
one. Find that single one. Your algorithm should have a linear runtime
complexity.
用额为空间的,建立一个hastable就行了,相同的数计数,返回计数是一个的值
int singleNumber(int A[], int n) {
unordered_mapnummap;
for (int i=0;i nummap[A[i]]++;
for (auto it=nummap.begin();it!=nummap.end();it++){
if (it->second==1) return it->first;
}
}
但是如果只能用固定的额为空间的话,只能用位运算。
int是32位的数,每次把计数的位移到个位,然后计数,3的倍数的话,用%3清零,最后
得到就是要找的那个数的在这个位置的bit(0或1)。计数好后,移动到以前的bit位置,
用|总结所有的位。但是下面的程序的结果就是不对。不知道为啥?
int singleNumber(int A[], int n) {
int bits[32],res=0;
for (int i=0;i<32;i++){
bits[i]=0;
for (int j=0;j if ((A[j]>>i)&1) bits[i]=(bits[i]+1)%3;
}
res|=(bits[i]<}
return res;
}
one. Find that single one. Your algorithm should have a linear runtime
complexity.
用额为空间的,建立一个hastable就行了,相同的数计数,返回计数是一个的值
int singleNumber(int A[], int n) {
unordered_map
for (int i=0;i
for (auto it=nummap.begin();it!=nummap.end();it++){
if (it->second==1) return it->first;
}
}
但是如果只能用固定的额为空间的话,只能用位运算。
int是32位的数,每次把计数的位移到个位,然后计数,3的倍数的话,用%3清零,最后
得到就是要找的那个数的在这个位置的bit(0或1)。计数好后,移动到以前的bit位置,
用|总结所有的位。但是下面的程序的结果就是不对。不知道为啥?
int singleNumber(int A[], int n) {
int bits[32],res=0;
for (int i=0;i<32;i++){
bits[i]=0;
for (int j=0;j
}
res|=(bits[i]<}
return res;
}