
LeetCode:136. 只出现一次的数字!!
计算集合的总和:将数组转换成集合,然后计算集合中所有元素的总和。由于集合中的每个元素都只出现一次,所以这个总和就是所有不同元素的和。 计算双倍总和:将集合的总和乘以二。这是因为如果所有元素都出现两次,那么它们的总和应该是双倍的集合总和。 计算原数组的总和:直接计算数组中所有元素的总和,包括重复的元素。 找出差异:用双倍总和减去原数组的总和,差值即为只出现一次的数字。 sum_set:首先将数组转换为集合,计算集合中所有元素的总和。由于集合中每个元素只出现一次,所以这个总和就是所有不同元素的和。 sum_nums:直接计算数组中所有元素的总和,包括重复的元素。 返回差异:计算
发布日期:2021-05-08 02:38:23
浏览次数:18
分类:精选文章
本文共 762 字,大约阅读时间需要 2 分钟。
要解决这个问题,我们需要找出一个整数数组中只出现一次的数字。给定的数组中,除了某个元素只出现一次外,其余每个元素均出现两次。我们的目标是设计一个高效的算法,具备线性时间复杂度,并且不使用额外的空间。
解题思路
为了高效地解决这个问题,我们可以运用数学思想。具体步骤如下:
这种方法的时间复杂度为 O(n),因为我们只需要遍历数组两次:一次计算总和,另一次计算双倍总和。空间复杂度为 O(1),因为我们只使用了常数额外的空间。
解决代码
class Solution: def singleNumber(self, nums: List[int]) -> int: sum_set = sum(set(nums)) sum_nums = sum(nums) return 2 * sum_set - sum_nums
代码解释
2 * sum_set - sum_nums
,这个差值就是只出现一次的数字。因为如果所有元素都出现两次,那么总和应该是双倍的集合总和,差值即为只出现一次的元素。发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月20日 17时18分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
OSI 7 层网络模型
2019-03-05
JDK 内置的多线程协作工具类的使用场景
2019-03-05
Java 中哪些对象可以获取类对象
2019-03-05
linux 的 sleep 命令
2019-03-05
11.2.6 时间值的小数秒
2019-03-05
Redis源码分析(七)--- zipmap压缩图
2019-03-05
大规模集群自动化部署工具--Chef的安装部署
2019-03-05
自定义Hive Sql Job分析工具
2019-03-05
【MySQL】(九)触发器
2019-03-05
关于Altium Designer 09导出BOM表不能正确分类问题
2019-03-05
Oracle 11G环境配置
2019-03-05
【Python】(十二)IO 文件处理
2019-03-05
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2019-03-05
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2019-03-05
C语言的数值溢出问题(上)
2019-03-05
BottomNavigationView控件item多于3个时文字不显示
2019-03-05
函数指针的典型应用-计算函数的定积分(矩形法思想)
2019-03-05