题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路
用一个变量记录当前数字出现的次数,下一个数字不同时变量减一,否则加一。
代码
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
count = 0
preNum = 0
for i, v in enumerate(numbers):
if i == 0:
count = 1
preNum = v
continue
if v != preNum:
count -= 1
else: count += 1
if count == 0:
preNum = v
count = 1
count = 0
for i in numbers:
if i == preNum: count += 1
return preNum if count > len(numbers) / 2 else 0