该题解使用了摩尔投票算法(Boyer-Moore Voting Algorithm),这是一种用于寻找数组中出现次数超过一半的元素的有效方法。算法的核心思想是维护一个候选元素和一个计数器。遍历数组时,如果计数器为0,则将当前元素设为候选元素并将计数器设为1。如果当前元素等于候选元素,则增加计数器;如果不等,则减少计数器。这样,最后剩下的候选元素就是出现次数超过一半的元素。
时间复杂度: O(n)
空间复杂度: O(1)
class Solution:
def majorityElement(self, nums: List[int]) -> int:
c = 1 # 初始化计数器为1
m = nums[0] # 初始化候选元素为第一个元素
for num in nums[1:]: # 从第二个元素开始遍历
if num == m:
c += 1 # 如果当前元素等于候选元素,增加计数器
else:
c -= 1 # 如果当前元素不等于候选元素,减少计数器
if c <= 0:
c = 1 # 如果计数器小于等于0,更新候选元素
m = num
return m # 返回候选元素
if __name__ == '__main__':
s = Solution()
s.majorityElement([3, 3, 4]) # 示例调用