📅  最后修改于: 2023-12-03 15:37:51.757000             🧑  作者: Mango
多数元素(Majority Element)是指在一个数组中出现次数超过数组长度一半的元素。在算法中,找到多数元素是一道常见的问题,可以用于解决选举投票、数据流分析、以及数据压缩等问题。
最简单的方法是使用两层循环来枚举数组中的每个元素,并统计它出现的次数,然后找到出现次数最多的那个元素。时间复杂度为$O(n^2)$,空间复杂度为$O(1)$。
def majorityElement(nums):
for num in nums:
count = sum(1 for elem in nums if elem == num)
if count > len(nums) // 2:
return num
我们可以使用哈希表来记录每个元素出现的次数。时间复杂度为$O(n)$,空间复杂度为$O(n)$。
def majorityElement(nums):
counts = collections.Counter(nums)
return max(counts.keys(), key=counts.get)
摩尔投票法是一种时间复杂度为$O(n)$,空间复杂度为$O(1)$的方法。它的思路是如果我们把多数元素记为+1,把其他元素记为-1,那么所有元素的和一定是大于0的。因此我们可以用一个变量c来记录当前的和,如果c为0,那么我们就重新选择一个元素作为候选元素。
def majorityElement(nums):
candidate, count = None, 0
for num in nums:
if count == 0:
candidate = num
count += 1 if num == candidate else -1
return candidate
在解决多数元素问题时,我们可以使用多种方法,包括暴力法、哈希表法、以及摩尔投票法。其中,摩尔投票法是最为高效的,它利用了多数元素出现次数大于数组长度一半的特性,将时间复杂度压缩至$O(n)$。