《剑指Offer》刷题之数组中出现次数超过一半的数字 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例: 示例 1 : 输入:[1,2,3,2,2,2,5,4,2] 返回值:2 代码1: # -*- coding:utf-8 -*- class Solution: def MoreThanHalfNum_Solution(self, numbers): length = len(numbers) // 2 result = {} for i in numbers: if i not in result: result[i] = 1 else: result[i] += 1 if result[i] > length: return i return 0 算法说明: 求出数组长度的一半大小,建立空的字典; 逐个遍历数组元素,如果当前元素不在字典中,则将当前元素存入字典,键值置为1; 如果当前元素在字典中,将键值+1; 如果键值超过一半的长度,返回当前元素,否则返回0。