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
    
  • 相关阅读:
    封装ajax---基于axios
    XHR的理解和作用
    params和 query区别
    HTTP请求交互的基本过程
    http3次握手
    ES6----import * as 用法
    微信小程序真机调试:Setting data field "XXX" to undefined is invalid
    webpack详解-----optimization
    node跨域
    shell 的 功能语句--1
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/13903497.html
Copyright © 2011-2022 走看看