给定一个大小为 n 的数组 nums 返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n2 ⌋ 的元素。例如 输入:nums = 2211122 输出:2
可以使用摩尔投票算法来解决这个问题。
摩尔投票算法的基本思想是,如果一个元素出现的次数超过了数组长度的一半,那么它出现的次数减去其他元素出现的次数之和一定大于0。因此,我们可以设置一个候选元素,遍历数组,如果当前元素与候选元素相同,则计数器加一,否则计数器减一。当计数器为0时,我们将候选元素更新为当前元素。
具体实现如下:
- 初始化候选元素和计数器,候选元素默认为数组的第一个元素,计数器初始化为1。
- 遍历数组,对于每个元素: a. 如果当前元素与候选元素相同,则计数器加一; b. 否则,计数器减一; c. 如果计数器减到了0,将候选元素更新为当前元素,并将计数器重新设置为1。
- 返回候选元素。
代码示例(Python):
def majorityElement(nums):
candidate = nums[0]
count = 1
for i in range(1, len(nums)):
if nums[i] == candidate:
count += 1
else:
count -= 1
if count == 0:
candidate = nums[i]
count = 1
return candidate
nums = [2,2,1,1,1,2,2]
print(majorityElement(nums)) # 输出:2
时间复杂度分析:遍历一次数组,时间复杂度为O(n)。空间复杂度为O(1)
原文地址: http://www.cveoy.top/t/topic/i0Tp 著作权归作者所有。请勿转载和采集!