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

运行结果

相关推荐
一起养小猫1 分钟前
LeetCode100天Day3-判断子序列与汇总区间
java·数据结构·算法·leetcode
404未精通的狗13 分钟前
(数据结构)二叉树、二叉搜索树+简单的排序算法(考前速成版)
数据结构·算法·排序算法
程序媛徐师姐15 分钟前
Java基于SSM的社会救助信息管理系统,附源码+文档说明
java·社会救助信息管理系统·java社会救助信息管理系统·ssm社会救助信息管理系统·社会救助·java社会救助信息管理·java社会救助管理系统
太理摆烂哥18 分钟前
数据结构之并查集
数据结构
爱笑的眼睛1119 分钟前
深度解析现代OCR系统:从算法原理到高可用工程实践
java·人工智能·python·ai
武子康19 分钟前
Java-207 RabbitMQ Direct 交换器路由:RoutingKey 精确匹配、队列多绑定与日志分流实战
java·消息队列·rabbitmq·erlang·ruby·java-rabbitmq
2501_9167665420 分钟前
idea多模块项目运行设置
java·intellij-idea
Knight_AL22 分钟前
CMS vs G1 GC 写屏障:拦截时机与漏标的根本原因
java·jvm·算法
YGGP22 分钟前
【Golang】LeetCode 75. 颜色分类
算法·leetcode
陈震_23 分钟前
《字节外包二面凉经》
java·字节外包