给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

2023-10-30

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
比如:nums = [4,1,2,1,2]
返回:4

法一思路:使用异或


由于相同的元素异或结果是0, 0和任意元素异或都是该元素,所以遍历一遍数组,直接将数组中的所有元素进行异或,最终结果就是只出现一次的数字

int main()
{
	int arr[] = { 4,1,2,1,2 };
	int ret = 0;
	int sz = sizeof (arr) / sizeof (arr[0]);
	for (int i = 0; i < sz; i++)
	{
		ret = ret ^ arr[i];
	}
	printf("%d", ret);

	return 0;
}

 法二:暴力解决


对数组中的元素进行遍历,如果该元素出现了2次,则继续下一个,直到找到只出现一次的数据。

法二:将原先的数组分为两个数组 

void func(int* arr, int len, int* pnum1, int* pnum2)
{
	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) == 1)
		{
			pos = i;
			break;
		}
	}
	for (int i = 0; i < len; i++)
	{
		if ((arr[i] >> pos) & 1)
		{
			*pnum1 ^= arr[i];
		}
		else
		{
			*pnum2 ^= arr[i];
		}
	}
}
int main()
{
	int ret1 = 0;
	int 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\n", ret1, ret2);
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 的相关文章

随机推荐

  • 图片自动填充单元格_教你两个word技巧,快速填充文本,插入表格不变形

    许多人说 Word没有什么用 只是一个打字工具 因此长期以来 Word是最被忽视的办公软件之一 觉得自己没必要学习这个软件 从而放弃了学习 但事实却并非如此 在Word看似 简单 的外表下 隐藏着海量的功能和技巧 但很多人其实只会了Word
  • SJTU括号栈配对(OJ599)

    题目源自SJTU OJ 1599 模拟一个括号栈 其元素是三种括号 给出长为n的操作序列 按序列要求完成以下几种操作 push pop 栈空则忽略此操作 输出栈顶元素 栈空则忽略此操作 询问当前括号是否匹配 栈空则认为匹配 Input Fo
  • python爬虫利器:user agent switcher

    一 推荐理由 方便 相比于在浏览器中右键检查 再将浏览器设置成手机端 如下图 user agent switcher给我们带来更多的是方便 一次设置好 就不怕每次麻烦的右键检查 设置成手机端的重复性操作了 这对于python爬虫算是一个比较
  • Keil uVision5开发环境搭建(MDK 5)

    1 下载并安装 MDK作为STM32常用的IDE 其他还有IAR等等 在学习STM32F103的过程中 我之所以选择MDK 是因为KEIL5可以完美兼容KEIL4 与之前的版本相比 最大的区别在于器件 Software Packs 与编译器
  • VS2017+cmake+DCMTK编译安装

    转载自嗯哇创作https blog csdn net chaoenhu article details 78200274 Visual Studio 2015 cmake编译安装MD版的DCMTK 一 编译环境 本文的编译机器是Window
  • 判断字符串类型以及对比

  • R语言数据处理:tidyr包学习

    文章目录 前言 1 gather 函数 2 spread 函数 3 unite 函数 4 separate 函数 5 缺失值处理 总结 前言 在R语言中 tidyr包的应用 tidyr主要提供了一个类似Excel中数据透视表 pivotta
  • git远程连接全流程

    查看文件状态 git status 把文件提交到暂存区 git add 提交文件 命令形式 git commit m 注释内容 连接到远程仓库 这里的origin是远端名称 一般默认都是origin 后面的地址是仓库路径 git remot
  • office2022最新版本Microsoft 365

    office2022正式版是微软即将发布的全新的office版本 office2022正式版将于 2021 年下半年发布 适用于 Windows 和 macOS 系统 按照惯例 微软每隔三年发布一次新版 Office 所以在2021年下半年
  • KEIL调试正在运行的程序

    问题现象 有时程序跑着跑着就飞了 但此时却没有接仿真器 不能停下来看运行状态 如果重新启动调试 会破坏现场 有没有办法attach到应用程序上调试呢 答案是肯定的 解决措施 在调试选项中 取消以下选择项 Options For Target
  • Oracle练习题(九)

    Oracle练习题 九 1 创建一个存储过程 以员工号为参数 输出该员工的工资 创建存储过程 create or replace procedure print sal n number as val sal emp sal type be
  • “==“和equals的区别是什么

    对于基本类型 比较的是值是否相等 对于引用类型 比较的是地址是否相等 equals 比较的是对象是否相等 不能比较基本类型 因为equals是Object超类中的方法 而Object是所有类的父类 因为 Java 只有值传递 所以 对于 来
  • 把符合要求的数组放到一个新的数组中

    var arra j 0 筛选出大于等于比值 for var i 0 i lt arr length i if arr i gt num arra j arr i 我们经常有这样的需求 我们要筛选出 一个数值最接近数组中的某个数据 并且选择
  • CCF-CSP 新生必读

    CCF软件能力认证 Certified Software Professional CSP CSP认证考什么 怎么考 1 认证概况 认证名称 计算机软件能力考试认证 简称软件能力认证 认证定义 软件能力包括软件的开发 测试 部署和运行维护能
  • 简单的vscode打开多个文件时实现标签栏多行显示

    一 问题描述 vscode在打开文件的时候所有的标签都是在一行 找个东西就很麻烦 设置成多行显示就很方便了 二 设置 打开vscode的设置 搜索wrap tabs 勾选上就可以了
  • hibernate type=MyISAM 报错

    在配置hibernate cfg xml中 如果配置了使用hibernate创建表 则会出现type mylsam错误 主要为引擎错误 错误操作 hibernate cfg xml配置了下面语句后 自动创建表 不建议使用
  • Java读取、写入、处理Excel文件中的数据

    在日常工作中 我们常常会进行文件读写操作 除去我们最常用的纯文本文件读写 更多时候我们需要对Excel中的数据进行读取操作 本文将介绍Excel读写的常用方法 希望对大家学习Java读写Excel会有帮助 在开始进行Java读写Excel前
  • c# 获取快捷方式指向的目标路径

    注意 在使用如下代码之前需进行这些操作 选择 解决方案资源管理 引用 右键 添加引用 COM Windows Script Host Object Model 确定 代码如下 获取快捷方式指向的目标路径 public static read
  • VC++ 教程

    基本概念 对象 面向对象编程2 定义实体后 可以不知道此实体的功能是怎样实现的 也能使用它们 核心概念 1 数据封装 将一个数据与这个数据有关的操作集合封装在一起 形成一个能动的实体 称为对象 2 继承 在面向对象语言中 类功能支持层次机制
  • 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    给你一个 非空 整数数组 nums 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 比如 nums 4 1 2 1 2 返回 4 法一思路 使用异或 由于相同的元素异或结果是0 0和任意元素异或都是该元素 所