只出现一次的数字Python3不使用额外空间

17次阅读

共计 393 个字符,预计需要花费 1 分钟才能阅读完成。

提出问题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求:你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?

解题思路:使用异或运算解决。
异或运算规则:1. 相同数字进行异或运算结果为 0。2. 0 与任何数进行异或运算结果为该数字。
比如 [4,1,1] 4 与 1 异或为 5,5 与 1 异或为 4,最终输出 4 为正确答案。
所以算法先设定最终输出值为 0,让输出值与数组中所有元素进行一次异或操作,即可得出最终答案。

代码如下(~▽~):

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        num = 0
        for i in range(len(nums)):
            num = num^nums[i]
        return num

时间与空间复杂度:

题目链接:https://leetcode-cn.com/probl…

正文完
 0