📅  最后修改于: 2023-12-03 15:37:15.816000             🧑  作者: Mango
这是一个关于ISRO CS 2017 5月的问题,对于准备ISRO考试的程序员来说可能会有很大的帮助。
给定一个整数数组,你需要找出其中所有出现超过 n/k 次的元素,其中 n 是数组大小,k 是给定的正整数。
Input: arr[] = {3, 1, 2, 2, 1, 2, 3, 3}
k = 4
Output: 无
Input: arr[] = {3, 1, 2, 2, 1, 2, 3, 3}
k = 2
Output: 2, 3
def find_n_k_majority_elements(arr: list, k: int):
n = len(arr)
ans = []
for i in range(n):
cnt = 1
for j in range(i+1, n):
if arr[j] == arr[i]:
cnt += 1
if cnt > n//k and arr[i] not in ans:
ans.append(arr[i])
if ans:
print(*ans)
else:
print("无")
def find_n_k_majority_elements(arr: list, k: int):
n = len(arr)
ans = []
d = {}
for i in range(n):
if arr[i] in d:
d[arr[i]] += 1
else:
d[arr[i]] = 1
for key in d:
if d[key] > n//k:
ans.append(key)
if ans:
print(*ans)
else:
print("无")
def find_n_k_majority_elements(arr: list, k: int):
n = len(arr)
ans = []
arr.sort()
gap = n//k
cnt = 1
for i in range(1, n):
if arr[i] == arr[i-1]:
cnt += 1
else:
if cnt > gap:
if arr[i-1] not in ans:
ans.append(arr[i-1])
cnt = 1
if cnt > gap:
if arr[n-1] not in ans:
ans.append(arr[n-1])
if ans:
print(*ans)
else:
print("无")
以上三种方法的时间复杂度分别为O(n^2)、O(n)和O(nlogn),可以根据具体情况选择合适的方法来解决问题。