LeetCodeHot100-136-只出现一次的数字
题目
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
**输入:**nums = [2,2,1]
**输出:1
示例 2 :
**输入:**nums = [4,1,2,1,2]
**输出:4
示例 3 :
**输入:**nums = [1]
**输出:1
提示:
1 <= nums.length <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
- 除了某个元素只出现一次以外,其余每个元素均出现两次。
题解
官方题解
Python
官方的题解是使用异或方法,相同数字进行异或运算得到的结果是 0,0 和任何数进行异或运算的结果是该数字,那么只要对所有数进行异或运算就可以得到结果了。
1 | class Solution: def singleNumber(self, nums: List[int]) -> int: return reduce(lambda x, y: x ^ y, nums) |
我的题解
Python
思路比较朴素,就是先对整个序列进行一次排序,然后从头到尾进行遍历,对于每个偶数位置 i
,如果 nums[i] != nums[i + 1]
,就说明有一个单独的数了,这个适合需要 return nums[i]
,如果遍历到最后,都没有这种情况,那么有两张情况:
1)没有单独的数,万事大吉了~
2)最后一个是单独的数,需要单独判断 nums[len_num - 2] != nums[len_num -1]
,不等就返回最后一个数就好啦~
当然还有一个很特殊的情况:数组只有一个元素的时候,直接 return nums[0]
~
1 | class Solution: |
运行结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Excelius's World!