题目——单身狗们!

news2024/11/15 21:30:10

目录

题目要求:

题目内容:

思路展开:

 代码演示:


题目要求:

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次编写一个函数找出这两个只出现一次的数字。

题目内容:

有数组的元素是: 1,2,3,4,5,1,2,3,4,6 只有5和6只出现1次,要找出5和6。

思路展开:

  • 首先,我们先去除一个数字,只留下 1,2,3,4,5,1,2,3,4 这时候,我们想要取出只出现一次的数字,我们可以采用全员^的方式,进行提取,这里利用了^的原理,1^1=0 1^0=0
  • 所以,这一题无异于是变成了两个,如果变成了两个只出现一次的数字,我们可以将其分为两个部分。

  • 这里使用了^操作符,那我们就要注意,这题大概需要使用的就是二进制数位来进行操作。
  • 而若使用二进制数位进行操作,那么我们是否可以使用二进制数位的不同以此来将整个数组进行分离,分离成两个部分。 

 

  •  通过发现,得知,我们可以通过二进制数位的某一位不同来进行判断和分离,而二进制数是由0和1组成的,所以可以看某一位是0是1来进行分离。
  • 那么就可以通过先>> 或是<< 在使用&1来进行判断某一位数位是否是1。
  • 且,在通过二进制数位不同的地方来分离之前,我们要先判断不同的地方在何处,或是说在那个位置,所以我们第一时间使用^将二者的不同之处展示出来,以便于接下来的分离。
  • ^是同位置数位,不同的数最后的结果是1,相同的数是0,所以先进行5^6的操作,来表明不同之处,而下一步的目的,也就从寻找不同之处,变为了寻找那一个位置是1。
  • 而5^6在题目中,相当于整个数组进行全员^。
int ret = 0;
for (int i = 0;i < len; i++)
{
   ret ^ = arr[i];
}

而下一步,为了寻找哪一位是1,1的位置在哪里。

int pos = -1;
for (int i = 0; i < 32; i++)
{
   if (ret & (1<< i))  //先将1进行移位,在结合&的特性来判断每一位是否是1 
   {
      pos = i;
      break;
   }

}



& - 是同为1才为1,不同为0
  • 这一步是为了记录不同之处的位置,也就是1所处在的位置,以便接下来的分离操作。
  • 使用了 & 1的特性来判断这个数字是否是1 ,又使用了<<的功能,来进行判断二进制数位的每一位数位。

具体详细:http://t.csdn.cn/leuTQ

for (int i = 0; i < len; i++)
{ 
  if ((arr[i] >> pos) & 1)
  {
    *pnuml ^ = arr[i];
  }
  else
  {
    *pnum2 ^ = arr[i];
  }
}
  •  当数字的二进制数位 在pos 这个位置为1时((arr[i]>>pos)——利用了&的特性,二进制数位同为1时才会为1 ),开始进行分离运算。
  • 而运算的过程,就是分为两个部分后,两个部分各个进行全员^。

 代码演示:

void func(int* arr, int len, int* pnum1, int* pum2)
{
	int ret = 0;
	for (int i = 0; i < len; i++)
	{
		ret ^= arr[i];

	}
	int pos = -1;
	for (int i = 0; i < 32; i++)
	{
		if ((ret & 1) << i)
		{
			pos = i;
			break;
		}
	}
	for (int i = 0; i < len; i++)
	{
		if ((arr[i] >> pos) & 1)
		{
			*pnum1 ^= arr[i];
		}
		else
		{
			*pum2 ^= arr[i];
		}
	}

}
int main()
{
	int ret1 = 0, ret2 = 0;
	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
	int len = sizeof(arr) / sizeof(arr[0]);
	func(arr,len,&ret1,&ret2);
	printf("%d %d",ret1,ret2);
	return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SCNGO-CNN-LSTM-Attention数据分类预测程序&#xff0c;改进算法&#xff0c;融合正余弦和…

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作&#xff0c;例如AJAX&#xff0c;setTimeout等等&#xff1b;也有很多事件&#xff0c;例如用户触发的点击事件&#xff0c;鼠标…

javaScript:对函数的认识与应用

目录 一.前言 二.函数介绍 A.函数的分类 1.自定义函数 示例 2.匿名函数 声明匿名函数 计时器也是匿名函数 3.立即执行函数 解释 示例 B.函数的返回值 没有参数&#xff0c;没有返回值的函数 示例 没有参数&#xff0c;有返回值的函数 示例 有参数&#xff0c;有…

Transformer在医学影像中的应用综述-分割

文章目录 Transformers in Medical Imaging: A Survey摘要方法手工的方法基于卷积的方法基于Transformer的方法影像分割2D3D 多器官分割纯transformer混合Transformer单规模结构transformer在编码器中Transformer在编码器和解码器之间Transformer在编码器和解码器中Transformer…

【React】生命周期和钩子函数

概念 组件从被创建到挂载到页面中运行&#xff0c;再到组件不用时卸载的过程。 只有类组件才有生命周期。 分为三个阶段&#xff1a; 挂载阶段更新阶段销毁阶段 三个阶段 挂载阶段 钩子函数 - constructor 创建阶段触发 作用&#xff1a;创建数据 之前定义状态是简写&…

Datawhale Django 后端开发入门 Task05 DefaultRouter、自定义函数

一、DefaultRouter是Django REST framework中提供的一个路由器类&#xff0c;用于自动生成URL路由。路由器是将URL与视图函数或视图集关联起来的一种机制。Django REST framework的路由器通过简单的配置可以自动生成标准的URL路由&#xff0c;从而减少了手动编写URL路由的工作量…

五种消息模型简单说明

五种消息模型简单说明 RabbitMQ提供了6种消息模型&#xff0c;但是第6种其实是RPC&#xff0c;并不是MQ&#xff0c;因此不予学习。那么也就剩下5种。但是其实3、4、5这三种都属于订阅模型&#xff0c;只不过进行路由的方式不同。  我们通过一个demo工程来了解下RabbitMQ的…

代码随想录算法训练营(23/6/25)LeetCode 84.柱状图中最大的矩形

LeetCode 84.柱状图中最大的矩形 今天是算法训练营的打卡的最后一天&#xff0c;我开始觉得我能坚持下来&#xff0c;但因为个人原因&#xff0c;还有期末考试我花太多心思&#xff0c;打卡就一直断断续续&#xff0c;博客没怎么写&#xff0c;最终也写完了

ctfshow-web10 with rollup 绕过

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 基本方法&#xff0c;到处点一点&#xff0c;点到取消的时候&#xff0c;突然发现&#xff0c;可以下载一个文件&#xff1a; 看到这个源码&#xff0c;可以看到只能是通过满足下面的条件来拿到flag&#xff…

sql server 快速安装

目录标题 一、下载二、直接选择基本安装二、下载ssms&#xff08;数据库图形化操作页面&#xff09;三、开启sa账号认证&#xff08;一&#xff09;第一步&#xff1a;更改身份验证模式&#xff08;二&#xff09;第二步&#xff1a;启用 sa 登录 一、下载 下载地址&#xff1…

ModaHub魔搭社区:AI Agent在操作系统场景下的AgentBench基准测试

近日,来自清华大学、俄亥俄州立大学和加州大学伯克利分校的研究者设计了一个测试工具——AgentBench,用于评估LLM在多维度开放式生成环境中的推理能力和决策能力。研究者对25个LLM进行了全面评估,包括基于API的商业模型和开源模型。 他们发现,顶级商业LLM在复杂环境中表现出…

【leetcode 力扣刷题】链表基础知识 基础操作

链表基础知识 基础操作 链表基础操作链表基础知识插入节点删除节点查找节点 707. 设计链表实现&#xff1a;单向链表&#xff1a;实现&#xff1a;双向链表 链表基础操作 链表基础知识 在数据结构的学习过程中&#xff0c;我们知道线性表【一种数据组织、在内存中存储的形式】…

基于原生Servlet使用模板引擎Thymeleaf访问界面

我们常在Spring Boot项目中使用Thymeleaf模板引擎,今天突发奇想&#xff0c;尝试原生Servlet访问&#xff01; 说做就做 搭建完整的WEB项目 其中的大部分依赖都是后续报错 追加进来的 导入依赖 thymeleaf-3.0.11.RELEASE.jar 第一次访问 访问地址: http://localhost:8080…

利用屏幕水印学习英语单词,无打扰英语单词学习

1、利用屏幕水印学习英语单词&#xff0c;不影响任何鼠标键盘操作&#xff0c;不影响工作 2、利用系统热键快速隐藏&#xff08;ALT1键 隐藏与显示&#xff09; 3、日积月累单词会有进步 4、软件下载地址: 免安装&#xff0c;代码未加密&#xff0c;安全的屏幕水印学习英语…

Linux学习之ftp安装、vsftpd安装和使用

ftp需要两个端口&#xff1a; 数据端口 命令端口 ftp有两种模式&#xff1a; 被动模式&#xff1a;建立命令连接之后&#xff0c;服务器等待客户端发起请求。 主动模式&#xff1a;建立命令连接之后&#xff0c;服务器主动向客户端发起数据连接&#xff0c;因为客户端可能有防火…

6-2 使用函数求素数和

分数 20 全屏浏览题目 切换布局 作者 张高燕 单位 浙大城市学院 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。 素数就是只能被1和自身整除的正整数。注意&#xff1a;1不是素数&#xff0c;2是素数。 函数接口定义&#xff1a; int p…

相关变化率的例子

如图&#xff0c;不解释。 很多物理学上的物理量&#xff0c;直接使用微分和导数来定义&#xff0c;因此可以不加证明的直接使用这些物理量。 解&#xff1a; d l 2 , d w 3 dl 2, dw 3 dl2,dw3 v l 2 w 2 , d v − 2 l d l 2 w d w 2 l 2 w 2 − 2 12 2 2 5…

内网渗透神器CobaltStrike之内网信息收集(九)

收集域内信息 Windows命令 查看网关的ip地址, DNS的ip地址、域名等等&#xff1a;shell ipconfig /all 查看当前主机所在的域: shell net view /domain 查看当前域的主机列表: shell net view 查看指定域的主机列表: shell net view /domain:[domain] 若beacon用户是域控, 则…

数据同步工具比较:选择适合您业务需求的解决方案

在当今数字化时代&#xff0c;数据已经成为企业的核心资产。然而&#xff0c;随着业务的扩展和设备的增多&#xff0c;如何实现数据的高效管理和同步成为了一个亟待解决的问题。本文将介绍几种常见的数据同步工具&#xff0c;并对比它们的功能、性能和适用场景&#xff0c;帮助…