Answers
其实,有点像一个罐子里,有黑色白色两种球,白色的球超过一半,用什么办法去拿球,能保证最后留下的那个球是白色的。解决方案是,每次拿两个球,如果颜色一样就放回去,如果颜色不一样就都丢出来。
这个题目,可以采用类似的方法,每次取两个数,相同就保留,不同就都去掉。
具体实现过程中需要两个临时变量,一个记录候选结果,一个记录在扫描过程中出现的次数。
times = 0.
for i < N
if times == 0
candidate = arr[i], times = 1
else
if candidate == arr[i]
times++
else
times--
end if-else
end if-else
end for
最后,其实这个题是个经典面试题了,就在编程之美的129页。以上伪码显示不太好,可以直接翻书去了~
= =
myllll
answered 12 years, 6 months ago