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

运行结果

相关推荐
凯瑟琳.奥古斯特11 分钟前
二分查找解力扣1011最优运载能力
开发语言·c++·算法·leetcode·职场和发展
深盾科技_Virbox17 分钟前
软件交付保护如何从加壳走向代码虚拟化
java·python·安全
学计算机的计算基19 分钟前
二叉树算法下篇:递归核心技巧与高频面试题详解
java·笔记·算法
水龙吟啸31 分钟前
华为2026.6.24机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·机器学习·华为
Liquad Li33 分钟前
Salesforce高级开发面试题
java·网络·面试·crm·salesforce
Eloudy41 分钟前
全文 - Evolution Strategies as a Scalable Alternative to Reinforcement Learning
人工智能·算法
Zhou1411361 小时前
Java常见面试题7
java·开发语言
Yang_jie_031 小时前
笔记:数据结构(链表)
数据结构·笔记·链表
net3m331 小时前
可以加大adc滑动滤波的间隔时间,比如定时每20ms采集一次滤波输入,且用滑动窗口均值滤波
算法
带刺的坐椅1 小时前
代码审查 Agent Harness 实战:AI 自动 Code Review
java·ai·llm·agent·solon·soloncode·harness