136.137. 只出现一次的数字 I. II(简单,中等,数组)

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

示例 1:

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

方法一:

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        for i in range(1,len(nums)-1,2):
            if nums[i-1]!=nums[i]:
                return nums[i-1]
        return nums[-1]

方法二: 

def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        s={}
        for i in nums:
            if i not in s.keys():
                s[i]=1
            else:
                s.pop(i)
        return list(s.keys())[0]
#执行用时: 60 ms, 在Single Number的Python3提交中击败了54.92% 的用户

 方法三:大神的方法,运用异或的原理

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        for i in nums:
            res^=i
        return res

 

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

示例 1:

输入: [2,2,3,2]
输出: 3

思路一:最简单的想法,一个一个的去数,看看哪个数字不是三,但是运行很慢

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for i in nums:
            if nums.count(i)!=3:
                return i
            

执行用时: 1780 ms, 在Single Number II的Python3提交中击败了5.84% 的用户

思路二:每隔三个检验一次,看是否相同。检验的是每组的前两个。最后会把最后一个落下,如果循环结束的话,就是最后一个数字了。

class Solution:
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        for i in range(1,len(nums)-1,3):
            if nums[i-1]!=nums[i]:
                return nums[i-1]
        return nums[-1]

执行用时: 48 ms, 在Single Number II的Python3提交中击败了92.69% 的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值