【題目描述】
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說明是否真正理解了原問題的解法,還是只是背了答案。
【參考答案】