设 T[0: n-l]是 n 个元素的数组。对任一元素x,设 S(x)=i Ti=x;当| S(x) > n/2 时,称x为 T 的主元素。设计一个线性时间算法,确定 TTO: n-I]是否有一个主元素
时间: 2024-06-06 10:07:51 浏览: 101
寻找一堆数字中的主元素
可以使用摩尔投票算法来解决这个问题,它可以在线性时间内找到一个出现次数超过一半的元素。
算法步骤:
1. 初始化候选主元素为 T[0],计数器 count 为 1。
2. 从 T[1] 开始遍历数组,如果当前元素与候选主元素相等,则将计数器加1;否则将计数器减1。
3. 如果计数器变为0,则将当前元素设为候选主元素,并将计数器设为1。
4. 遍历结束后,候选主元素即为可能的主元素,再次遍历数组统计其出现次数,如果出现次数大于 n/2,则它是主元素;否则不存在主元素。
代码实现:
def find_majority_element(T):
candidate = T[0]
count = 1
for i in range(1, len(T)):
if T[i] == candidate:
count += 1
else:
count -= 1
if count == 0:
candidate = T[i]
count = 1
count = 0
for i in range(len(T)):
if T[i] == candidate:
count += 1
if count > len(T) // 2:
return candidate
else:
return None
阅读全文