只出现一次的数字

 我来答
天然槑17
2022-07-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6571
采纳率:100%
帮助的人:38.2万
展开全部

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
1、使用异或方式(不使用额外空间)

A^0=A
A^A=0
A B c B C = A
上面等同于
var singleNumber = function(nums) {
return nums.reduce((a,b)=> a^b)
};
2、不考虑时间空间复杂度的话还可以使用更多的方法
比如:
1:使用集合存储数字,集合中不存在重复数字,集合中数字总和的2倍代表每个元素出现两次,减去原数组的和即是数组中只出现一次的数。

2:使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。

3:使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。

Map是一组键值对的结构,具有极快的查找速度。
方法:map.set() .has() .delete() .get()
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值覆盖。
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
方法:map.add() .has() .delete() .get()

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式