# -*- 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