根据题目,主要解决两个问题,一个是判断出现数组出现的次数,二是输出出现次数过半的数值,无则返回0。根据这种情况,脑中第一个出现的就是用字典解决,判断value,输出key。
class Solution:
def MoreThanHlafNum_Solution(self,numbers):
dict={}
for i in numbers:
if not dict.has_key(i):
dict[i]=1
else:
dict[i]+=1
if dict[i]>len(numbers)/2.0:
return i
return 0
另解:
这种方法看起来比较巧,比较难想。如果存在一个次数过半的数值,它的出现的次数一定会比其他数值的总和要多。
class Solution:
def MoreThanHlafNum_Solution(self,nunbers):
if not numbers:
return 0
num=numbers[0]
count=1
for i in range(1,len(numbers)):
if numbers[i]==num:
count+=1
else:
count-=1
if count==0:
num=numbers[i]
count=1
count=0
for j in numbers:
if j ==num:
count+=1
return num if count>len(numbers)/2.0 else 0