题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
collections.Counter()
#统计词频
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
result = {}
for color in colors:
if result.get(color)==None:
result[color]=1
else:
result[color]+=1
print (result)
#{'red': 2, 'blue': 3, 'green': 1}
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
c = Counter(colors)
print (dict(c))
解题代码:
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
import collections
x = collections.Counter(numbers)
k = len(numbers)/2
for i,j in x.items():# count.items()
if j>k:
return i
return 0
不调包
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
if len(numbers)<1:
return 0
count = 1
a = numbers[0]
for i in numbers[1:]:
if a == i:
count+=1
else:
count-=1
if count==0:
a,count = i,1
count = 0
for i in numbers:
if a == i:
count+=1
if count>len(numbers)/2:
return a
return 0