只出现一次的数字

力扣地址

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

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例1:

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

示例2:

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

示例3:

输入:nums=[1]
输出:1

思路

考虑复杂度的情况下,可以用异或计算来进行解题
异或运算有以下三个性质:

  1. 任何数和0做异或运算,结果仍然等于原来的数,即 a^0 = a
  2. 任何数和自生做异或结果为0
  3. 异或运算满足交换律和结合律,即 a^b^a = a^a^b = 0^b = b

所以代码可以怎么写

golang

func singleNumber(nums []int) int {
    res := 0
    for _,v := range nums{
        res ^= v
    }
    return res
}
Last modification:May 28, 2024
如果觉得我的文章对你有用,请收藏本站