答疑坊 程设/离散/DSA 趣题若干

P1

问题描述

输入 \(3n-1\) 个数,其中 \(n-1\) 个数出现恰好 \(3\) 次,\(1\) 个数恰好出现 \(2\) 次。求这个出现 \(2\) 次的数。

要求,时间复杂度 \(\tilde {\mathcal O}(n)\) , 空间复杂度 \(\mathcal O(1)\) .

算法分析

考虑使用三进制不进位加法,显然满足交换律、结合律,且 \(a\oplus a\oplus a=0\) ,出现 \(3\) 次的数都抵消掉,只剩下恰好出现 \(2\) 次的那个数 \(a\) 的 "2倍"。

对最后结果 \(sum\)\(sum\oplus sum\) 。因 \(sum=a\oplus a\) , 故 \(sum\oplus sum=a\oplus a\oplus a\oplus a=a\)