只出现一次的数字 LeetCode C++

2023-11-09

目录

题目描述

方法一:vector

方法二:set

方法三:异或


题目描述

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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

方法一:vector

基本思路是,创建一个vector,然后将数组中的元素读进去,每次读取之前,先判断里面有没有这个元素,如果没有,那么将这个元素存进去,如果有,那么将它抹去,这样最后剩下来的就是只出现一次的元素。

要注意的是,vector自己没有find函数,所以需要调用algorithm库函数的find,这个函数返回的也是迭代器。vector的erase函数只能根据迭代器来删除,不能直接根据值来删除。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
	vector<int>temp;
	for(vector<int>::iterator it=nums.begin();it!=nums.end();it++){
		if(find(temp.begin(),temp.end(),*it)==temp.end())temp.push_back(*it);
		else temp.erase(find(temp.begin(),temp.end(),*it));
	}
	return *temp.begin();
    }
};

切片

class Solution {
public:
    int singleNumber(vector<int>& nums) {
	vector<int>temp;
	for(auto & i:nums)
	if(find(temp.begin(),temp.end(),i)==temp.end())temp.push_back(i);
	else temp.erase(find(temp.begin(),temp.end(),i));
	return *temp.begin();
    }
};

方法二:set

set比vector快很多。

基本思路同方法一,但是由于set自己有find函数,所以比较直接,set的erase函数可以直接根据值来删除。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
	set<int>temp;
	for(vector<int>::iterator it=nums.begin();it!=nums.end();it++){
		if(temp.find(*it)==temp.end())temp.insert(*it);
		else temp.erase(*it);
	}
	return *temp.begin();
    }
};

切片

class Solution {
public:
    int singleNumber(vector<int>& nums) {
	set<int>temp;
	for(auto & i:nums)
	if(temp.find(i)==temp.end())temp.insert(i);
	else temp.erase(i);
	return *temp.begin();
    }
};

方法三:异或

根据0和任何数异或是数本身,数本身异或为0的巧妙之处,可以通过连续异或来找到只出现一次的数,因为两次出现的数异或之后为0,而且异或的顺序不影响。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
	int temp=0;
	for(vector<int>::iterator it=nums.begin();it!=nums.end();it++){
		temp^=*it;
	}
	return temp;
    }
};

切片

class Solution {
public:
    int singleNumber(vector<int>& nums) {
	int temp=0;
	for(auto & i:nums)
	temp^=i;
	return temp;
    }
};

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

只出现一次的数字 LeetCode C++ 的相关文章

随机推荐

  • 实验2熟悉常用的HDFS操作

    1 实验目的 1 理解HDFS在Hadoop体系结构中的角色 2 熟练使用HDFS操作常用的Shell命令 3 熟悉HDFS操作常用的Java API 2 实验平台 1 操作系统 Linux 2 Hadoop版本 2 7 4 3 JDK版本
  • 详解ETL银行数据仓储抽取和加载流程概述

    ETL和ELT ETL是Extract Transfrom Load即抽取 转换 加载三个英文单词首字母的集合 E 抽取 从源系统 Souce 获取数据 T 转换 将源系统获取的数据进行处理加工 比如数据格式转化 数据精度转换 数据清洗 缺
  • python绘制小提琴图_Python:matplotlib 和 Seaborn 之热图、小提琴图和箱线图 (三十四)...

    热图 热图是直方图的二维版本 可以替代散点图 和散点图一样 要绘制的两个数字变量的值位于坐标轴上 和直方图类似 图形区域被划分为网格 并将每个网格的点数加起来 因为没有空间表示长条高度 因此用网格颜色表示计数 你可以通过 Matplotli
  • android module 之间引入出现manifest 冲突

    原因 manifest 文件中属性冲突 例如 原因是导入的库在build gradle中的minSdkVersion与你的应用的minSdkVersion不匹配导致的 app要求应用最小系统版本和库要求系统最小版本不一致 改成 样的就行了
  • 怎么提高团队的代码质量

    1 java代码规范 阿里巴巴IDEA代码规范包 安装和使用的方法 https www jianshu com p 8973b20f2de9 2 编写高质量的单元测试 开发人员能提交测试之前 通过单元测试完成自测 3 保证代码质量要做到持续
  • unity 鼠标点击在2D 物体上 和UI上

    unity 鼠标点击在2D 物体上 和UI上 1 鼠标是否点击在2D 物体上
  • Git的下载与安装教程

    一 Git下载 官网下载地址 Git git scm com 点击 Download for Windows 跳转至详细下载页面 以Windows64位安装版为例 点击 64 bit Git for Windows Setup 即可进行下载
  • 3分钟阿里云服务器网络收发包PPS性能详解

    阿里云服务器ECS网络收发包PPS是什么 云服务器PPS多少合适 网络收发包PPS是指云服务器每秒可以处理的网络数据包数量 单位是PPS即packets per second每秒发包数量 阿里云百科来详细说下阿里云服务器网络收发包PPS性能
  • 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码

    Unity学习笔记 Unity中文课堂教程 C 中级编程代码 最近想补一补C 基础 Unity官方的C 中级编程教程质量很高 于是开个帖子把跟着敲 记录了部分价讲解和我自己的理解的代码存在这 原课程链接 添加链接描述 https www b
  • s3c2440上的nor flash启动与nand flash启动的区别

    nor flash启动与nand flash启动的区别 1 接口区别 NOR FLASH地址线和数据线分开 来了地址和控制信号 数据就出来 NAND Flash地址线和数据线在一起 需要用程序来控制 才能出数据 通俗的说 就是光给地址不行
  • vue基础之组件化及父子间通信

    基本组件拆分和嵌套 为了不是项目看起来复杂难懂 所以我们采用组件化开发 所有的组件单独放 在需要使用的地方嵌套即可 app vue
  • Vue组件嵌套和组件通信

    一 组件嵌套 组件嵌套 在一个组件中使用另一个组件 div div
  • Lodash中的_.cloneDeep(value) 深拷贝和_.clone(value) 浅拷贝

    Lodash 是一个一致性 模块化 高性能的 JavaScript 实用工具库 cloneDeep value 这个方法类似 clone 除了它会递归拷贝 value 注 也叫深拷贝 参数 value 要深拷贝的值 返回 返回拷贝后的值 例
  • 距离计算方法-聚类

    k 均值聚类算法的性能会受到所选距离计算方法的影响 所以 今天总结了一下有关距离计算的一些总结 如有错误 望大家指正 1 欧式距离是大家最熟悉的了 比如两点之间的距离的计算 可以写成向量的运算形式 工程中用的最多 2 曼哈顿距离 Manha
  • TypeScript学习(Never、辨析联合类型、索引签名)

    Never 程序语言的设计确实应该存在一个底部类型的概念 当你在分析代码流的时候 这会是一个理所当然存在的类型 TypeScript 就是这样一种分析代码流的语言 因此它需要一个可靠的 代表永远不会发生的类型 never 类型是 TypeS
  • 黑客常用的攻击手段

    黑客攻击手段分为非破坏性攻击和破坏性攻击两大类 非破坏性攻击一般只是为了扰乱系统的运行 并不盗窃系统资料 通常采用拒绝服务攻击或信息炸弹 破坏性攻击是以入侵他人电脑系统 盗窃系统保密信息 破坏目标系统的数据为目的的 下面介绍黑客常用的几种攻
  • YARN原理总结

    问题导读 1 hadoop1 x中mapreduce框架与yarn有什么共同点 2 它们有什么不同点 3 yarn中有哪些改变 4 yarn中有哪些术语 yarn是比较难懂的一个地方 也是很重要的一个组件 不止hadoop使用yarn sp
  • 局域网计算机无法配置网关,在内网中,为什么不设置“默认网关”计算机也能互相通讯?...

    在内网中不设置 默认网关 的计算机也能互相通讯 是因为在同一内网 同一VLAN同一子网 中两台计算机机之间是不需要通过默认网关来通信的 是通过交换机 或路由器 上的列表来匹配进行数据传输的 下面讲一下这样子的通信原理 一 PC A向PC C
  • 关键路径例题图表_计算题专题:关键路径法(CPM)

    关键路径法 Critical Path Method CPM 通过分析项目过程中哪个活动序列进度安排的总时差最少来预测项目工期的网络分析 产生目的 为了解决 在庞大而复杂的项目中 如何合理而有效地组织人力 物力和财力 使之在有限资源下以最短
  • 只出现一次的数字 LeetCode C++

    目录 题目描述 方法一 vector 方法二 set 方法三 异或 题目描述 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 说明 你的算法应该具有线性时间复杂度 你可以不使用额外空间来