给定一个大小为 n 的数组,找到在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
时间: 2024-04-29 22:22:43 浏览: 111
给定一个整数数组,其中元素的取值范围为0到10000,求其中出现次数最多的数
5星 · 资源好评率100%
摩尔投票算法可以解决这个问题,算法的基本思想是:每次从数组中选出两个不同的元素,将其删除;如果两个元素相同,则保留一个,并将其删除。这样不断重复,最终剩下的元素就是出现次数大于 ⌊ n/2 ⌋ 的元素。
具体实现如下:
1.假设第一个元素为出现次数大于 ⌊ n/2 ⌋ 的元素,计数器 count 初始化为 1。
2.从第二个元素开始遍历数组,如果当前元素和计数器中的元素相同,则计数器加 1,否则计数器减 1。
3.如果计数器减为 0,则重新将下一个元素设为出现次数大于 ⌊ n/2 ⌋ 的元素,并将计数器设为 1。
4.最终剩下的元素即为出现次数大于 ⌊ n/2 ⌋ 的元素。
代码实现如下(假设数组中一定存在出现次数大于 ⌊ n/2 ⌋ 的元素):
```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
```
时间复杂度为 O(n),空间复杂度为 O(1)。
阅读全文