zoukankan      html  css  js  c++  java
  • [leetcode]只出现一次的数字

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

    说明:

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

    示例 1:

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

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

    这道题我第一次看到是考虑建立一个dict,dict的key是数组的值,dict的val是该数字出现的次数,最后找到数字为1的就可以。代码如下:

    class Solution(object):
        def singleNumber(self, nums):
    	dic={}
    	for num in nums:
    		if num in dic:
    			dic[num]=2
    		else:
    			dic[num]=1
    	for item in dic:
    		if dic[item]==1:
    			return item
    

    但是这样实现实际上需要额外建立一个dict,在空间上有一定损耗。
    更巧妙的方法是使用异或操作,两个相同的数异或结果为0,两个不同的数异或结果为1,一个数跟0异或是这个数本身。
    也就是说:
    aba = b
    所以可以定义一个整数,初始化为0,并用该数依次与列表中元素进行异或操作,最后的结果肯定就是只出现过一次的那个数!
    代码如下:

    class Solution():
        def singleNumber(self, nums):
            num = 0
            for i in nums:
                num ^= i
            return num
    
  • 相关阅读:
    mysql给数据库字段赋值为随机数
    利用lList集合中的subList进行分页
    redis中分页缓存数据
    ios账号第三方登录,判断是否是Ios账号
    通过ip查询ip地址
    MySQL
    排序算法
    139. 单词拆分
    138. 复制带随机指针的链表
    137. 只出现一次的数字 II
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/13903497.html
Copyright © 2011-2022 走看看