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主从复制
    shell 文件中添加内容
    nginx+tomcat 负载均衡
    springMVC接受数组
    javaweb集成swagger
    svn 验证位置失败 Authorization failed
    java 实现一个beautiful的弹层和具体功能
    java 实现冒泡排序
    Error running 'Unnamed': Address localhost:1099 is already in use
    页面怎么引用外部css+js代码
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/13903497.html
Copyright © 2011-2022 走看看