📅  最后修改于: 2023-12-03 15:07:33.341000             🧑  作者: Mango
这道题目是一道经典的数据结构和算法综合题目。题目简述如下:
有一个长度为 N 的正整数数组 A,找到所有至少出现 M 次的数。请写一个时间复杂度 O(N log(N)) 的算法解决这个问题。
这道题目可以使用一种基于二分查找的变式算法解决。具体步骤如下:
该算法的时间复杂度为 O(N log(N)),其中排序的时间复杂度为 O(N log(N)),遍历数组的时间复杂度为 O(N)。因此,总的时间复杂度为 O(N log(N))。
代码实现如下所示:
def find_majority_numbers(A, M):
# 对数组进行排序
B = sorted(A)
# 定义指针、计数器和结果集合
l = r = 0
count = 0
result = set()
# 遍历数组 B
for i in range(1, len(B)):
if B[i] == B[i-1]:
count += 1
r = i
else:
if count >= M:
result.add(B[l])
l = r = i
count = 1
# 判断最后一个元素
if count >= M:
result.add(B[l])
# 返回结果集合
return result
其中,参数 A 表示输入的数组,参数 M 表示出现次数至少为 M 次。该代码的返回值为一个集合,包含所有出现次数至少为 M 次的元素。