找单身狗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;
}

运行结果

相关推荐
炽烈小老头5 分钟前
【每天学习一点算法 2025/12/22】将有序数组转换为二叉搜索树
学习·算法
ZePingPingZe9 分钟前
秒杀-库存超卖&流量削峰
java·分布式
horizon727414 分钟前
【Redis】Redis 分片集群搭建与故障转移实战指南
java·redis
想学后端的前端工程师14 分钟前
【Java设计模式实战应用指南:23种设计模式详解】
java·开发语言·设计模式
jghhh0118 分钟前
POCS(凸集投影)算法解决部分k空间数据缺失导致吉布斯伪影
算法
小白勇闯网安圈21 分钟前
Java的集合
java·开发语言
罗湖老棍子24 分钟前
最小函数值(minval)(信息学奥赛一本通- P1370)
数据结构·c++·算法··优先队列·
大学生资源网24 分钟前
基于springboot的乡村信息化管理系统的研究与实现(源码+文档)
java·spring boot·后端
LYFlied25 分钟前
【每日算法】LeetCode 4. 寻找两个正序数组的中位数
算法·leetcode·面试·职场和发展
长安er26 分钟前
LeetCode 62/64/5/1143多维动态规划核心题型总结
算法·leetcode·mybatis·动态规划