剑指Offer-python 39 数组中出现次数超过一半的数字

it2022-05-05  120

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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

最新回复(0)