📅  最后修改于: 2023-12-03 15:10:15.752000             🧑  作者: Mango
本考试是针对计算机科学领域的资格认证考试,旨在测试考生的计算机科学相关知识和技能。本文重点介绍其中的第 50 题。
给定大小为 n 的数组 arr [] 和整数 x。找到所有重复的元素,其中每个元素的出现次数正好为 x。
方法 1: 哈希表
算法
遍历数组 arr [] 中的所有元素,并将每个元素的出现次数存储在哈希表中。 再次遍历哈希表,并打印出现次数正好为 x 的元素。
代码片段
from collections import defaultdict
def findDuplicates(arr, x):
n = len(arr)
count_map = defaultdict(int)
for i in range(n):
count_map[arr[i]] += 1
for key, value in count_map.items():
if value == x:
print(key, end=' ')
方法 2: 排序
算法
对数组进行排序。 初始化计数器,并且设置前一个元素为数组的第一个元素。 遍历整个数组,如果当前元素与前一个元素相同,则增加计数器。 如果当前元素与前一个元素不同,则将计数器与 x 进行比较。如果计数器等于 x,则打印前一个元素并将计数器重置为 1。否则,将计数器重置为 1。 注意:当最后一个元素与前一个元素相同时,需要在函数结束之前再次进行比较和打印。
代码片段
def findDuplicates(arr, x):
n = len(arr)
arr = sorted(arr)
i = 1
count = 1
while i <= n:
if i == n or arr[i] != arr[i-1]:
if count == x:
print(arr[i-1], end=' ')
count = 1
else:
count += 1
i += 1
本文介绍了解决 UGC NET CS 2017 年一月至三日问题 50 的两种方法:哈希表和排序。哈希表方法的时间复杂度为 O(n),空间复杂度为 O(n)。排序方法的时间复杂度为 O(n log n),空间复杂度为 O(1)。在处理大型数组时,排序方法可能更加高效。