问题来源 剑指 Offer 39. 数组中出现次数超过一半的数字 剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 常规思路 思路:使用字典记录每个元素出现的次数(时间复杂度:O(N),两次循环,空间复杂度:O(M)) class Solution: def majorityElement(self, nums) -> int: num_freq = dict() for i in nums: if i in num_freq: num_freq[i] += 1 else: num_freq[i] = 1 for item in num_freq.items(): if item[1] > len(nums) / 2: return item[0] 大佬解析 面试题39. 数组中出现次数超过一半的数字(摩尔投票法,清晰图解) 代码 class Solution: def majorityElement(self, nums: List[int]) -> int: votes = 0 for num in nums: if votes == 0: x = num votes += 1 if num == x else -1 return x