int s = 0;
int t = 0;
int u = 0;
for (int i = 0; i < 10; i++) {
s |= 1 << a[i];
t |= 1 << b[i];
u |= 1 << c[i];
}
System.out.println( Integer.numberOfTrailingZeros( s & t & u ) );
Boolean boxHasNumber(Box b, Number x) // does Box b have Number x?
FOR EVERY Number n IN Box b
IF n = x RETURN True
// otherwise x is not in box
RETURN False
Number sameNumber(Box b1, b2, b3) // which number appears in all 3 boxes?
FOR EVERY Number x FROM 1 TO 10
IF boxHasNumber(b1, x) AND
boxHasNumber(b2, x) AND
boxHasNumber(b3, x)
RETURN x
// otherwise, no number appears in all 3 boxes
ERROR
# 1 楼答案
阅读你的问题描述“每个盒子包含10张编号的纸(1-10),但所有3个盒子中都有一个相同的编号”我认为:
就像这里,数字“8”是所有三个框中唯一出现的一个
这是你的问题吗
然后您写道:“如何以高效/最快的方式在java中找到重复的数字?”
现在你希望效率/速度如何?你说的是O(n)高效(即使盒子没有分类),比如这里(稍微有些模糊,让你有点困惑):
;)
不知怎的,我不确定你的老师会认为你想出了那个答案:)
# 2 楼答案
这里有一个简单的算法来解决这个问题。这并不是最快/最有效的,但因为你连最简单的逻辑都在挣扎,所以这个应该是有教育意义的。它在这里以伪代码呈现,并附有注释:
请注意所谓的辅助函数的用法。基本上,查找一个数字是否在一个盒子中的逻辑被封装在它自己的完整、可重用、可测试的函数中。这使得整体逻辑更具可读性