位运算之妙用:识别独特数字(寻找单身狗)

目录

找单身狗1

图解:

代码如下:

找单身狗2

图解:

代码如下:


寻找单身狗1

从数组中 的1 2 3 4 5 1 2 3 4 中找出没有另一个相同的数与其匹配的数

这个问题的原理是利用异或运算的性质。异或运算(XOR)是一种二进制运算,其特点是相同为0,不同为1。在这个问题中,数组arr中的所有元素都出现了两次,只有一个元素只出现了一次。通过异或运算,可以将出现两次的元素抵消掉,最后剩下的就是只出现一次的元素。

具体步骤如下:

  1. 初始化一个变量n为0,用于存储异或结果。
  2. 遍历数组arr,将每个元素与n进行异或运算,并将结果赋值给n。
  3. 遍历结束后,n的值就是只出现一次的元素。

  图解:

 代码如下:

//找单身狗1
int main()
{int n = 0;int arr[9] = { 1,2,3,4,5,1,2,3,4 };for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++){n = n ^ arr[i];//任何数和0异或就得到自己,与自己异或则为0}printf("%d", n);

寻找单身狗2

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

编写一个函数找出这两个只出现一次的数字。

例如:

有数组的元素是:1,2,3,4,5,1,2,3,4,6

只有5和6只出现1次,要找出5和6.

        找出一个只出现过一次的数字的问题处理方法就是找一个数字把里面所有的数字都异或一遍,利用异或两次等于没异或的特点来处理。那么如果有两个数字都只出现了一次,那么如此得到的应该是两个数异或的结果。首先这个结果肯定不是0(要不然就全都配对了),所以里面一定至少一位是一。找出值为1的一位,以这一位的值将结果分为两组。例如1 2 3 4 1 2,异或完的结果应该是3^4得到的111,那么随便找一位就行了。例如找最低位,那么这一位是1的有1 3 1,是0的有2 4 2,由于是利用异或结果为1的某一位分的组,所以两个待查询数字一定分别在两组中。所以再找两个变量,分别异或两组数,即可找到这两个数。

图解:

代码如下:


//找单身狗2
//1 2 3 4 5 1 2 3 4 6//pnum1 和 pnum2 存储 你找到的这两个数据 n代表数组长度
void FindNum(int arr[], int len, int* pnum1, int* pnum2)
{//1.将整个数组异或起来,得到两个不同数字的异或结果 例如: 5^6int tmp = 0;for (int i = 0; i < len; i++){tmp ^= arr[i];}//2.找到tmp中,二进制为1的某一位k 0110 0111 0001int k = 0;for (int i = 0; i < 32; i++){if ((tmp >> i) & 1 != 0){k = i;break;}}//3、遍历数组 把每个数据 第K为上是1的,分到一个组进行异或//最终的值存储到 pnum1 或者 pnum2 当中*pnum1 = *pnum2 = 0;for (int i = 0; i < len; i++){if ((arr[i] >> k) & 1 != 0){//第k位是1*pnum1 ^= arr[i];}else{	//第k位是0*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 num1 = 0;int num2 = 0;;FindNum(arr, len, &num1, &num2);printf("%d %d", num1, num2);return 0;
}

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450188.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka常见生产问题详解

目录 生产环境常见问题分析 消息零丢失方案 1、生产者发消息到Broker不丢失 2、Broker端保存消息不丢失 3、消费者端防止异步处理丢失消息 消息积压如何处理 如何保证消息顺序 ​问题一、如何保证Producer发到Partition上的消息是有序的 问题二&#xff1a;Partition中…

Echarts+Vue 首页大屏静态示例Demo 第三版

效果图: 源码: <template><div class="content bg" style="height: 100vh;overflow-y: auto" :class="{ fullscreen-container: isFullScreen }"><div class="reaDiv" style="height: 10vh"><div…

阿里云AI通义千问出bug,今天修复了,一切都是莫名其妙,国产AI又可以了?

怎么隔一天就好了&#xff1f; 引言我的处理感想再次提问AI代码结尾 引言 前天我的阿里云AI 通义千问 不是抽风了嘛 详情见 阿里云AI通义千问出bug,解决不了直接弃,开始对国产AI由支持变失望 就是我的一些对话莫名消失了 我的处理 我在这里进行了反馈 但是没有回应 我以为…

【leetcode题解C++】98.验证二叉搜索树 and 701.二叉搜索树中的插入操作

98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例…

Jupyter Notebook中的%matplotlib inline详解

Jupyter Notebook中的%matplotlib inline详解 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;什么是魔术命令&#x1f333;&#x1f333;%matplotlib inline详解&#x1f333;(&#x1f448;直入主题请点击)&#x1f333;小结&#x1f333;&…

如何把vue项目打包成桌面程序 electron-builder

引入 我们想要把我们写的vue项目,打包成桌面程序&#xff0c;我们需要使用electron-builder这个库 如何使用 首先添加打包工具 vue add electron-builder 选择最新版本 下载完毕 我们可以看到我们的package.json中多了几行 electron:build&#xff1a;打包我们的可执行程序 e…

[python]基于opencv实现的车道线检测

【检测原理】 一、首先进行canny边缘检测&#xff0c;为获取车道线边缘做准备 二、进行ROI提取获取确切的车道线边缘&#xff08;红色线内部&#xff09; 三、利用概率霍夫变换获取直线&#xff0c;并将斜率正数和复数的线段给分割开来 四、离群值过滤&#xff0c;剔除斜率…

重写Sylar基于协程的服务器(5、IO协程调度模块的设计)

重写Sylar基于协程的服务器&#xff08;5、IO协程调度模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、…

Unity | YooAssetV2.1.0 + HybridCLR热更新

目录 一、项目更改 二、使用YooAsset热更 1.资源配置 2.资源构建 3.将两个文件夹下的资源上传CDN服务器 4.修改代码 5.运行效果 本文记录利用YooAssetHybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版&#xff0c;dll(原生文件)和资源要建两个p…

前端JavaScript篇之map和Object的区别、map和weakMap的区别

目录 map和Object的区别map和weakMap的区别 map和Object的区别 Object是JavaScript的内置对象&#xff0c;用于存储键值对。Object的键必须是字符串或符号&#xff0c;值可以是任意类型。Map是ES6引入的新数据结构&#xff0c;用于存储键值对。Map的键可以是任意类型&#xff…

山东淄博刑侦大队利用无人机抓获盗窃团伙

山东淄博刑侦大队利用无人机抓获盗窃团伙 近期&#xff0c;山东淄博临淄区发生多起盗窃案件。通过视频追踪和调查访问&#xff0c;推断临淄区某村可能为嫌疑人藏匿地点。刑侦大队无人机应急小组迅速到达现场&#xff0c;经无人机高空侦查&#xff0c;发现并锁定了嫌疑人的藏匿…

AES算法:数据传输的安全保障

在当今数字化时代&#xff0c;数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展&#xff0c;我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard&#xff08;AES&#xff09;算法应运而生。本文将介绍AES算法的优缺点、解决了…