题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解题思路 1:
如果是排好序的数组,可以容易地统计出每个数字出现的次数。题目给出的数组没有说是排好序的,因此需要先排序。 排序的时间复杂度是O(nlogn) 。
python代码:
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
if numbers is None:
return 0
if len(numbers) == 1:
return numbers[0]
num = sorted(numbers)
l = len(num)
for i in range(l-1):
if i+l/2<l and num[i]==num[i+l/2]:
return num[i]
return 0
解题思路2:
用字典(键值对)实现。键存放数组中出现的数字,值存放对应数字出现的次数。
python代码:
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
if numbers is None:
return 0
dict1 = {}
for num in numbers:
dict1[num] = 1 if num not in dict1 else dict1[num]+1
if dict1[num]>len(numbers)/2:
return num
return 0