[练习/python]找出那个只出现了一次的元素

题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
1、第一反应想到的方法,不考虑空间:
测试用例结果是正确的,力扣提交报错:超出索引。
自己debug了一下感觉没毛病啊。

lst = [0 for i in range(max(nums) + 1)]
for i in range(len(nums)):
    j = nums[i]
    if lst[j] == 1:
        lst[j] = 0
    else:
        lst[j] = 1
for i in range(len(lst)):
    if lst[i] == 1:
        break
print(i)

2、异或:

a^a=0
a^0=a

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

3、还是很粗暴,直接排序,毕竟python的函数很方便

Python里的sort排序是一种名为Timsort的排序方法,
其时间复杂度为O(n log n),空间复杂度为O(n)

class Solution(object):
    def singleNumber(self, nums: List[int]) -> int:
        nums.sort()
        for i in range(len(nums)):
            if len(nums) == 1:
                return nums[0]
            if nums[0] == nums[1]:
                del nums[0]
                del nums[0]
            else:
                return nums[0]


版权声明:本文为qq_43185879原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。