leetcode--136--只出现一次的数字

题目描述:

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

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

示例 1:

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

示例 2:

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

解题思路1:

  1. 利用Counter,并通过most_common将其转换为list形式。
  2. 由于Counter默认排序,键最小的放在最后,根据题意直接输出即可

代码1:

from collections import Counter
class Solution(object):
    def singleNumber(self, nums):
        numbers = Counter(nums).most_common()
        return numbers[len(numbers)-1][0]

s = Solution()
nums = [4,1,2,1,2]
print(s.singleNumber(nums))

解题思路2:

以下来自:leetcode官方

  1. 任何一个数字和其他数字异或两次都等于它本身;
  2. 任意数和0异或等于它本身。

代码2:

class Solution(object):
    def singleNumber(self, nums):
        ret = 0
        for item in nums:
            ret = ret^item
        return ret
    
s = Solution()
nums = [4,1,2,1,2]
print(s.singleNumber(nums))

解题思路3:

  1. 遍历数组中的每一个元素
  2. 如果某个数组中的数字是新出现的,则将它添加到列表中
  3. 如果某个数字已经在列表中,删除它

代码3:

class Solution(object):
    def singleNumber(self, nums):
        no_duplicate_list = []
        for i in nums:
            if i not in no_duplicate_list:
                no_duplicate_list.append(i)
            else:
                no_duplicate_list.remove(i)
        return no_duplicate_list.pop()

解题思路4: 哈希表

  1. 遍历 nums 中的每一个元素
  2. 查找 hash_table 中是否有当前元素的键
  3. 如果没有,将当前元素作为键插入 hash_table
  4. 最后, hash_table 中仅有一个元素,用 popitem 获得它

代码4:

class Solution(object):
    def singleNumber(self, nums):

        hash_table = {}
        for i in nums:
            try:
                hash_table.pop(i)
            except:
                hash_table[i] = 1
            print(hash_table)
        return hash_table.popitem()[0]

解题思路5: 数学

            2∗(a+b+c)−(a+a+b+b+c)=c


代码5:

class Solution(object):
    def singleNumber(self, nums):
        return 2 * sum(set(nums)) - sum(nums)

题目来源:
136. 只出现一次的数字

发布了406 篇原创文章 · 获赞 51 · 访问量 5万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览