[小米] 异形数

简介: 在一个长度为n的整形数组a里,除了三个数字只出现一次外,其他的数字都出现了2次。请写程序输出任意一个只出现一次的数字,程序时间和空间复杂度越小越好。 例如: a = {1,3,7,9,5,9,4,3,6,1,7},输出4或5或6。解题思路如果只有一个只出现一次,将所有数做异或运算,返回其值。如果有两个数只出现一次,假设为a和b,全部数做异或运算的结果为x=a^

在一个长度为n的整形数组a里,除了三个数字只出现一次外,其他的数字都出现了2次。请写程序输出任意一个只出现一次的数字,程序时间和空间复杂度越小越好。 例如: a = {1,3,7,9,5,9,4,3,6,1,7},输出4或5或6。

解题思路

  • 如果只有一个只出现一次,将所有数做异或运算,返回其值。
  • 如果有两个数只出现一次,假设为a和b,全部数做异或运算的结果为x=a^b,由于a和b不相等,所以x不为0。从右向左扫描第一个为1的位,根据该为是否为1,将原数组分为两组,再对每组数据按情况一处理。
  • 对于有三个数只出现一次的情况,可以根据三个数两两异或,最低位有两个相同,有一个不同来求解。

实现代码

#include <iostream>
using namespace std;

int lowbit(int x);
int find(int *num, int len);

int main()
{
    int num[] = {1,1,2,2,3,3,4,4,5,6,7};
    cout<<find(num, sizeof(num)/sizeof(num[0]))<<endl;

    return 0;
}

//找出从右到左第一个出现1的位置
int lowbit(int x)
{
    return x & ~(x - 1);
}

int find(int *num, int len)
{
    int xors = 0;
    for (int i = 0; i < len; i++)
    {
        xors ^= num[i];
    }

    //三个数两两异或,最低位有两个相同,有一个不同
    int low = 0;
    for (int i = 0; i < len; i++)
    {
        //表示的是low = lowbit(a^b) ^ lowbit(a^c) ^ lowbit(b^c)
        low ^= lowbit(xors ^ num[i]);
    }

    int result = 0;
    for (int i = 0; i < len; i++)
    {
        if (lowbit(xors ^ num[i]) == low)
        {
            result ^= num[i];
        }
    }

    return result;
}
目录
相关文章
|
6月前
|
算法 vr&ar 计算机视觉
基于PTGui和Ps 有手和低端手机就能拼接生成一张酷酷VR720°商用全景图
这篇文章介绍了如何使用PTGui和PhotoShop软件,配合低端手机,通过一系列步骤拍摄并拼接生成一张720°商用全景图,包括软件下载、拍摄要求、素材获取、拼接合成、发布全景图以及提高拍摄效果的方法。
基于PTGui和Ps 有手和低端手机就能拼接生成一张酷酷VR720°商用全景图
|
存储 人工智能 5G
小米发布会中断:雷军生病,今晚将继续发布折叠屏小米MIX新品
原预计4小时的小米发布会忽然中断,宣布改为分两天举行,发布会暂停的原因竟是雷军身体不适。
243 0
|
5G 内存技术
坚果发布新款5G手机,骁龙865+一亿像素
坚果发布新款5G手机,骁龙865+一亿像素
258 0
坚果发布新款5G手机,骁龙865+一亿像素
|
传感器 存储 算法
三星S9曝光信息汇总:配置完美+真正的全面屏?
到了2017年底,基本上所有手机厂商的旗舰机型都已经悉数亮相了,作为一名对硬件痴迷的科技爱好者,科技君当然就已经将目光放到了明年初的新机上。
261 0
三星S9曝光信息汇总:配置完美+真正的全面屏?
|
传感器 Android开发 iOS开发
曝三星研发超大底6亿像素传感器
12月6日,国内知名数码博主在推特爆料称,三星正在研发6亿像素传感器,而它的尺寸更是达到了1/0.57英寸,比iPhone 12 Pro Max的传感器可能还要大一倍,甚至达到了微单的水平。
201 0
曝三星研发超大底6亿像素传感器
|
传感器 人工智能 编解码
50倍变焦拍月球!华为P30:最强拍照手机正式发布,最高9500元
在 Mate 20 引入强大 AI 算力之后,华为把手机拍照能力提升到了前所未有的水平。在「不够硬」的苹果发布会十几个小时之后,华为 2019 年发布的第一款旗舰机 P30 系列刚刚在法国巴黎亮相。
371 0
华为一季度手机发货量超5900万台,折叠屏手机或延期
传华为Mate X延期至9月上市,或因柔性屏良品率较低。
330 0
小米首款三折叠屏手机曝光,折叠屏会是2019年热潮吗?
值得注意的是,当手机屏幕折叠的时候,相应的系统软件也会快速优化适应到最佳状态。
770 0
|
机器学习/深度学习 人工智能 算法
爱奇艺「智能机顶盒」打出的第二张牌——蜀小果
爱奇艺在成都发布新一代4K智能机顶盒「蜀小果」。
679 0