题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
使用一个times保存当前数字出现了多少次。
如果出现了0次,把新数字加入res;如果当前数字和res相等,那么times+=1;如果不等times-=1。
最后还是要判断一下,到底是不是出现超过了一半。
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
if not numbers:
return 0
res = 0
times = 0
for num in numbers:
if times == 0:
res = num
times = 1
elif num == res:
times += 1
else:
times -= 1
return res if numbers.count(res) > len(numbers) / 2 else 0
# list的count方法,统计res在list中的频率
用字典(键值对)实现。键存放数组中出现的数字,值存放对应数字出现的次数。
def MoreThanHalfNum_Solution(self, numbers):
dict = {}
for num in numbers:
dict[num] = 1 if num not in dict else dict[num]+1
if dict[num] > len(numbers)/2:
return num
return 0
from collections import Counter
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
if not numbers: return 0
count = Counter(numbers).most_common()
if count[0][1] > len(numbers) / 2:
return count[0][0]
return 0