找单身狗2

找单身狗2

之前遇到类似的题目的思路:

首先写出这些数的二进制形式:

核心原理

接下来的问题是怎么把5和6分开来?

这里是最后一位进行比较,按位异或是相同为0,相异为1,最后一位从上图看出是1,说明这两个数不一样,就可以让这两个数被分开

这道题的难点:

1.怎么把它分成两组?

2.为什么分成两组?

3.根据什么标准分成两组?

接下来是代码过程:

C 复制代码
void FindNum(int arr[],int n,int* pNum1,int*pNum2)
{
    //1.对整个数组进行异或处理
    int tmp=0;
    for(int i=0;i<n;i++)
    {
        tmp^=arr[i];
	}
}
//2.tmp接受两个不同数字异或的结果
int pos=-1;
for(int i=0;i<32;i++)
{
    if(((tmp>>i)&1)==1)
    {
        pos=i;
        break;
	}
}
if(pos==-1)
{
    *pNum1=-1;
    *pNum2=-1;
    return;
}
for(int i=0;i<n;i++)
{
    if((arr[i]>>pos)&1==1)
    {
        *pNum1^=arr[i];
	}
    else
    {
        *pNum2^=arr[i];
	}
}
int main()
{
    int arr[]={1,2,3,4,5,1,2,3,4,6};
    int len=sizeof(arr)/sizeof(arr[0]);
    int ret1=0;
    int ret2=0;
    FindNum(arr,len,&ret1,&ret2);
    printf("%d %d",ret1,ret2);
    return 0;
}

运行结果

相关推荐
垆边人似月.8 分钟前
华为机考题:明明的随机数
数据结构·算法·华为
Doubbbbbbble云37 分钟前
多维空间索引结构R树与KD树性能对比研究4
算法
海上小飞龙39 分钟前
【KMP算法-中篇】next 数组的递推:往前填一位,靠的是往回退几步
算法
用户0942485680339 分钟前
第20章:JVM G1 GC原理、日志与调优实战
java·jvm
lusklusklusk40 分钟前
Python 四大数据结构详解:元组、列表、集合、字典的特点与增删改查
数据结构·windows·python
打工仔折腾 AI43 分钟前
把模型切换交给平台:用蓝耘智能路由搭建商品评论分析工具
java·服务器·前端·后端·python·性能优化·ai agent 实战
keyipatience43 分钟前
B树详解:从零构建平衡多路搜索树
数据结构·b树·算法·图搜索
后端LV1 小时前
Caffeine 源码详解:为什么它是最快的 Java 本地缓存——一次压测引发的源码考古
java·后端
dadaobusi1 小时前
Trace-driven 建模(基于轨迹/踪迹的建模)
java·后端·spring
知守观1 小时前
OBS 同名文件互相覆盖,客户拿错了别人的报告:一次文件串号的排查与重构
java·后端