返回介绍

Single Number

发布于 2025-02-22 13:01:25 字数 1115 浏览 0 评论 0 收藏 0

「找单数」系列题,技巧性较强,需要灵活运用位运算的特性。

Source

Given 2*n + 1 numbers, every numbers occurs twice except one, find it.

Example
Given [1,2,2,1,3,4,3], return 4

Challenge
One-pass, constant extra space

题解

根据题意,共有 2*n + 1 个数,且有且仅有一个数落单,要找出相应的「单数」。鉴于有空间复杂度的要求,不可能使用另外一个数组来保存每个数出现的次数,考虑到异或运算的特性,根据 x ^ x = 0x ^ 0 = x 可将给定数组的所有数依次异或,最后保留的即为结果。

C++

class Solution {
public:
  /**
   * @param A: Array of integers.
   * return: The single number.
   */
  int singleNumber(vector<int> &A) {
    if (A.empty()) {
      return -1;
    }
    int result = 0;

    for (vector<int>::iterator iter = A.begin(); iter != A.end(); ++iter) {
      result = result ^ *iter;
    }

    return result;
  }
};

源码分析

  1. 异常处理(OJ 上对于空 vector 的期望结果为 0,但个人认为-1 更为合理)
  2. 初始化返回结果 result 为 0,因为 x ^ 0 = x

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文