【题目描述】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
【思路】最开始的思路是借助左程云老师的思路,用一个cur和time来找出出现次数大于数组一半的字符,后来发现对于不存在的情况无法判断,如{3,3,4,4,5}还是会输出5。故采用字典映射的方式来寻找出现次数大于一般的字符,同时记得边界条件的判断。
代码:
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
n = len(numbers)
#边界条件,元素只有一个时
if n ==1:
return numbers[0]
#以时间换空间,采用字典记录每个数字的出现次数
dict_num = {}
#时间复杂度为O(n)
for i in range(0,n):
if numbers[i] in dict_num.keys():
dict_num[numbers[i]] +=1
if dict_num[numbers[i]]>n/2:
return numbers[i]
else: dict_num[numbers[i]] = 1
return 0