返回轨道
算法 · 2026-05-14 · 15 阅读

P135 只出现一次的两个数字

算法 15 阅读

信号摘要

难度:Medium · 时长:06:15 · leetcode 260 · lintcode 84

P135 只出现一次的两个数字

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你一个整数数组,数组中有两个数字只出现一次,而其他数字都正好出现两次。你要找到这两个只出现一次的数字。

比如说,给你的数组是:

2, 4, 2, 1, 4, 8

在这个数组中,1 和 8 只出现一次,其他的数字都出现了两次。因此你要返回 1 和 8:

1, 8

这里返回两个数字的顺序并不重要,因此你返回 [8, 1] 也是正确的。

代码

public class AlgoCasts {

  // Time: O(n), Space: O(1)
  public int[] singleNumberXOR(int[] nums) {
    int xor = 0, mask = 1;
    for (int num: nums) xor ^= num;
    while ((xor & mask) == 0) mask <<= 1;
    int x = 0, y = 0;
    for (int num: nums) {
      if ((num & mask) == 0) x ^= num;
      else y ^= num;
    }
    return new int[]{x, y};
  }

  // Time: O(n), Space: O(1)
  public int[] singleNumberXOR2(int[] nums) {
    int xor = 0;
    for (int num: nums) xor ^= num;
    int mask = xor & (-xor);
    int x = 0, y = 0;
    for (int num: nums) {
      if ((num & mask) == 0) x ^= num;
      else y ^= num;
    }
    return new int[]{x, y};
  }

}

📡 通讯频道