# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
# way 0
lennumbers = len(numbers)
if lennumbers == 0:
return None
numbers.sort()
index = int(lennumbers / 2)
count = 0
for i in range(lennumbers):
if numbers[i] == numbers[index]:
count += 1
if count > (lennumbers / 2):
return numbers[index]
return None
# way 1
# dict[key] = count
numsdict = {}
numlen = len(numbers)
for num in numbers:
if num in numsdict:
numsdict[num] += 1
else:
numsdict[num] = 1
if numsdict[num] > (numlen >> 1):
return num
return 0
# way 2
# 要想空间复杂度为O(1),时间复杂度为O(n)
# 遇到不相同的数字就相互抵消掉
last = 0
lastcount = 0
for num in numbers:
if lastcount == 0:
last = num
lastcount = 1
else:
if last == num:
lastcount += 1
else:
lastcount -= 1
if lastcount == 0:
return 0
else:
lastcount = 0
for num in numbers:
if num == last:
lastcount += 1
if lastcount > (len(numbers) >> 1):
return last
return 0