【题目描述】

Given an array of integers, the majority number is the number that occurs more than 1/3 of the size of the array.Find it.

Notice:There is only one majority number in the array.

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。

注意:数组中只有唯一的主元素


【题目链接】

http://www.lintcode.com/en/problem/majority-number-ii/


【题目解析】

进阶1:思路是,如果出现3个不一样的数,就抵消掉。记录两个candidate和每个candidate分别的出现次数。如果遍历到的数和两个candidate都不等,就count都减1。最后可能会剩下两个candidate,再遍历一次整个数组验证一下谁是主元素。


面试官角度:

利用了抵消法的题目,还有“落单的数”(九章算法面试题1),同样是有进阶问题。对于进阶问题而言,关键是要理解“抵消”的思路,既然2个数可以抵消,那么3个数k个数也可以抵消。抵消之后,剩下来的数中,主元素一定仍然超过1/3, 1/k。对于1/k的情况(进阶2),其实在面试中一般来说不会问到,这个题的解法是源自一篇论文,所以不会做的同学也不必过于担心。但进阶1还是需要掌握的,因为进阶1说明是否真正理解了原问题的解法,还是只是背了答案。


【参考答案】

http://www.jiuzhang.com/solutions/majority-number-ii/