我是靠谱客的博主 要减肥花瓣,最近开发中收集的这篇文章主要介绍#面试题#三进制异或,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#面试题#数组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<
    
    
   
   

最后

以上就是要减肥花瓣为你收集整理的#面试题#三进制异或的全部内容,希望文章能够帮你解决#面试题#三进制异或所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部