数组中只出现一次的两个数字之Ruby版

本文介绍了一种高效算法,用于在数组中查找仅出现一次的两个数字,数组中其他数字均出现两次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre name="code" class="ruby"><span class="comment" style="background-color: inherit; line-height: 22.5px; font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 15px; margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0);">问题描述:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。</span><span style="background-color: inherit; line-height: 22.5px; font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 15px; margin: 0px; padding: 0px; border: none;">  </span>

$a = [1,2,3,4,6,8,4,3,2,1]

def findtwonotrepeat(a,n)
  $temp = 0
  for i in 0...a.size
    $temp ^= a[i]    #两个只出现一次数字的异或结果保存在temp中
  end
  for j in 0...1.size
    break if ($temp>>j)&1 == 1   #确定第j位为两数字的不同位
  end
  $pn = 0
  $pm = 0
  for i in 0...a.size
    if (a[i]>>j)&1 == 1     #将数组分成两半,每一半都有一个只出现一次的数字
      $pn ^= a[i]
    else
      $pm ^= a[i]
    end
  end
end
findtwonotrepeat($a, $a.size)
print $a
print "#{$pn} and #{$pm} are the two not repeat numbers in array.","\n"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值