You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何通过位计数取模x可找出xn+1个数中的唯一数?

重复数中找唯一数的二进制取模方法原理解释

给定数组示例:[7,6,7,6,5,7,6],其中除唯一数5外,其余数7和6均重复3次(即x=3)。下面直白拆解这个方法的原理:

先看示例的实际运算过程

把数组中每个数的二进制按位对齐排列(补前导零保证位数一致):

7 → 1 1 1
6 → 1 1 0
7 → 1 1 1
6 → 1 1 0
5 → 1 0 1
7 → 1 1 1
6 → 1 1 0

统计每一列(从左到右对应二进制高位到低位)的1的数量:

  • 第1列:7个1
  • 第2列:6个1
  • 第3列:4个1

对每列的统计结果取模x=3:

  • 第1列:7 % 3 = 1
  • 第2列:6 % 3 = 0
  • 第3列:4 % 3 = 1

把结果按顺序组合就是101,对应十进制的5,也就是数组中的唯一数。

核心原理拆解

这个方法的本质是利用重复x次的数,其每一位二进制1的总出现次数必然是x的倍数:

  • 如果某个重复数的某一位是1,那它会在这一列贡献x个1(因为重复x次),总数是x的倍数;
  • 如果这个重复数的某一位是0,那它在这一列贡献0个1,总数也是x的倍数。

而唯一数的存在会打破这个倍数关系:

  • 若唯一数的某一位是1,那这一列的总1数 = 重复数贡献的x倍数个1 + 1,取模x后结果为1,对应唯一数的这一位是1;
  • 若唯一数的某一位是0,那这一列的总1数 = 重复数贡献的x倍数个1,取模x后结果为0,对应唯一数的这一位是0。

这样每一列取模后的结果,就正好拼出唯一数的二进制表示,转成十进制就是我们要找的数。

内容的提问来源于stack exchange,提问作者Szyszka947

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:52:33