题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

i c } m l p a o s r s f } t u F n F o c o r g } v f } v f } i } r u 2 m u a o a o f e n 9 o a r r r r t d S r r k u a o e d p r h r i } } k k i } e p r r t l T r e a f e e f y r e n i u h n i t s i l y i i t o t a . n u h n h s : n h = n u k n i n c t r M a h e h a k = t r e o H o ( n a n s a a I h s e ( n y n a u " p h s { s n a h y n " ! l n n - { M h h t s M i n - { f t 9 = a M M ? h a = l 9 N 9 p a a M p 9 u > 9 [ . p p = a [ k { 9 m I k . . p k ( 0 n e u u n . ] _ " t y p p i k ! " e ) s d d l e ) n l : . a a y > : s c t t s e I o e e n [ n n V V { . I { t t a a c n ] a l l o t ( i u u u ] ) n e e n ) s ( ( t ( h 1 / r a , 2 ) s h f { I { M o n a r t p K [ e { r y ] : ! + r 1 ) , f o r K e y : r )

算法思想:某个数字出现的次数大于数组长度的一半,意思就是它出现的次数比其他所有数字出现的次数和还要多。因此我们可以在遍历数组的时候记录两个值:1. 数组中的数字;2. 次数。遍历下一个数字时,若它与之前保存的数字相同,则次数加1,否则次数减1;若次数为0,则保存下一个数字,并将次数置为1。遍历结束后,所保存的数字即为所求。最后再判断它是否符合条件。

github地址:https://github.com/cubegao/LeetCode