力扣刷题之路——136.只出现一次的数字(python实现)

这篇博客介绍了三种不同的Python方法来解决数组中只有一个元素出现一次的问题。方法一是通过对数组排序后检查相邻元素;方法二是利用数组去重和求和特性;方法三是通过异或操作找到唯一值。这些方法都具有线性时间复杂度,并且不需要额外空间。
摘要由CSDN通过智能技术生成

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

在这里插入图片描述

方法一:这道题的解法其实有很多,因为在python中自带sort方法,所以可以先对其进行排序,排序后会保证重复元素一定是一样的,这样情况就会被归类为三种,即
①:只出现一次的数字在数组中间 如:1 1 2 2 3 4 4
②:只出现一次的数字在数组头 如:1 2 2 3 3 4 4
③:只出现一次的数字在数组尾 如:1 1 2 2 3 3 4
所以只要比较相邻元素是否相等就可判断出其只出现一次的数字是多少,需要注意的是,在这个比较过程中前两种为一类。第三种为另一类。
代码实现如下:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        if len(nums)==1:   #如果数组长度为1,则直接返回即可
            return nums[0]   
        nums.sort()     #对数组进行排序,使其相同元素靠在一起
        for i in range(1,len(nums),2):   #循环数组,验证前后是否相同,由于原始出现两次,因此可跳跃判断
            if nums[i-1] != nums[i]:
                return nums[i-1]
            if (i+2) == len(nums):   #判断单一元素在排序后数组的最后面
                return nums[-1]

方法二:直接利用python中的数组去重方法后求和,再将原数组×2后求和,减去题设中数组,其值则为只出现一次的数字

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
		return sum(set(nums))*2-sum(nums)

方法三:数组中的数反复异或,最后得出来得值就为唯一的值。

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        return reduce(lambda x, y: x ^ y, nums)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值