每日一练python15

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

示例 1:

输入: [2,2,1] 输出: 1
示例 2:

输入: [4,1,2,1,2] 输出: 4

程序说明:
1、第一个代码是首先看到题时,可能大多数人会想到的方法。先将数组按升序排序,遍历数组,第一个 if 用于判断某个元素是否和它前一个数相等,而第二个 if 判断语句用于判断当遍历到数组下标等于数组长度时(即倒数第二个数),输出数组最后一个数
2、第二个代码是采用了异或的方法来解决的,无论是通过代码的简洁性,还是运行结果的优化性,都可看出异或比暴力解题更加高效。下面提到的第三点对理解此题是关键。(异或:以二进制来说,若出现相同的数,如1异或1,异或的结果便是0,若出现的是不同的,如0异或1,结果便是1)
【1·通过观察异或的相关运算,可发现若是一个偶数异或1,那么答案是偶数+1;若是一个奇数异或1,那么答案便是这个奇数-1。 2·任何数与0异或得这个数。 3·相同的数异或为0】

全部代码:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        if len(nums)==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]
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        res = 0
        for i in nums:
            res=res^i
        return res

题目来源:力扣(leetcode)

猜你喜欢

转载自blog.csdn.net/qq_52669357/article/details/121387126