136.只出现一次的数字


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

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

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

  • 示例 1:
输入:nums = [2,2,1]
输出:1
  • 示例 2:
输入:nums = [4,1,2,1,2]
输出:4
  • 示例 3:
输入:nums = [1]
输出:1
  • 提示:
1 <= nums.length <= 3 * 10^4
-3 * 10^4 <= nums[i] <= 3 * 10^4
除了某个元素只出现一次以外,其余每个元素均出现两次。

思路

可以使用 异或运算(XOR)来解决这个问题。因为异或运算满足以下特性:

  1. a ^ a = 0(任何数和自己异或结果为0)。
  2. a ^ 0 = a(任何数和0异或结果为自己)。
  3. 异或运算满足交换律和结合律,即 (a ^ b) ^ c = a ^ (b ^ c)

因此,对于出现两次的元素,它们相互异或的结果是 0,只有那个出现一次的元素会最终保留下来。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

代码

public int singleNumber(int[] nums) {
    int result = 0;
    for (int num : nums) {
        // 将所有元素进行异或运算
        result ^= num;
    }
    return result;
}

文章作者: cxyexe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 cxyexe !
  目录