leetcode(36)------136.只出现一次的数字

版权声明:本文为博主原创文章,未经允许不得转载。 https://blog.csdn.net/wem603947175/article/details/82110575

版权声明:本文为博主原创文章,未经允许不得转载。https://blog.csdn.net/wem603947175/article/details/82110575


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

说明

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

示例 1:

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

示例 2:

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

思路分析:
1.不使用额外空间的话就在原数组上操作,先将数组排序,从后往前遍历,先删除最后面一个,数组长度减一,如果数组中还有这个数就再减一,这样就删除掉两个相同的数,如果数组中这个数唯一就返回。

Python代码实现

class Solution(object):
    def singleNumber(self, nums):
        nums = sorted(nums)
        i = len(nums)
        while i>0:
            a = nums[i-1]
            nums.remove(a)
            i -= 1
            if a in nums:
               nums.remove(a)
               i -= 1
            else:
                return a

2.又搜了搜别人的思路:先将数组中的数在字典中存放对应的次数,然后返回其中次数为一的。
class Solution:
    def singleNumber(self, nums):
        dict={}
        for num in nums:
            if num in dict:
                dict[num]+=1
            else:
                dict[num]=1
        for key in dict.keys():
            if dict[key]==1:
                return key

3.高级用法 异或 ^
0异或任何数不变,任何数与自己异或为0。a⊕b⊕a=b。异或满足加法结合律和交换律。

Python代码实现:

class Solution:
    def singleNumber(self, nums):
        res = 0
        for i in nums:
            res^=i
        return res

猜你喜欢

转载自blog.csdn.net/wem603947175/article/details/82110575