概述
#面试题#数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法,找到x。
分析:
假设该题目修改为:除了某一个数字x之外,其他数字都出现了两次,而x出现了一次。 则可以把所有数字直接求异或,最终的结果就是x。这个很好理解。
而该题目是其他数字都出现了三次,可以想到三进制异或运算。其实异或运算的本质就是 求和 % base。 比如 1 ^ 1 = 0 其实就是 (1+1) % 2 = 0。 因此只要按位求和,最后再将每位结果 模除 3,再转换为二进制即是答案x。
代码如下:
#include
using namespace std;
int main() {
int a[100] = {0};
int num;
int i;
while (cin >> num) {
i = 0;
while (num) {
a[i++] += num & 1; // the last num of base2 num
num >>= 1;
}
}
int x = 0;
for (i = 99; i >= 0; i--) {
if (a[i] > 0) break; //find the highest position
}
for (; i >= 0; i--) {
if (a[i] % 3 != 0) {
x += (1<
最后
以上就是要减肥花瓣为你收集整理的#面试题#三进制异或的全部内容,希望文章能够帮你解决#面试题#三进制异或所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复