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% 的用户

猜你喜欢

转载自blog.csdn.net/weixin_42234472/article/details/84916397