📅  最后修改于: 2023-12-03 14:58:18.956000             🧑  作者: Mango
该问题是计算机科学与工程考试门(GATE) 1999年的一道题目,考察的是程序员对计算机科学基础知识的理解与运用能力。
设 A
是一个包含 n(n > 0)
个元素的数组,该数组中的每个元素 A[i]
(0 ≤ i < n
)都是自然数。请设计一个时间复杂度为 O(n)
的算法,找出并返回数组中出现次数最多的元素及其出现次数。
输入:
A = [1, 2, 3, 2, 2, 3, 1, 3, 3]
输出:
出现次数最多的元素是 3,出现次数为 4
下面是一个可以解决给定问题的 Python 程序示例:
def find_most_frequent_element(nums):
count = dict()
max_count = 0
max_element = None
for num in nums:
if num in count:
count[num] += 1
else:
count[num] = 1
if count[num] > max_count:
max_count = count[num]
max_element = num
return max_element, max_count
该算法创建了一个 count
字典来记录每个元素的出现次数。在遍历数组元素的过程中,算法会更新记录的次数,并比较出现次数是否超过当前最大次数。如果是,则更新最大次数和对应的元素。
由于算法遍历了整个数组一次,操作次数与数组的长度 n
成正比,所以时间复杂度为 O(n)
。使用了一个 count
字典来记录出现次数,并使用常数额外空间,空间复杂度为 O(1)
。
这道问题考察了对计算机科学基础知识的理解与应用能力。算法的核心思想是使用一个字典记录每个元素的出现次数,并实时更新最大次数和对应的元素。该算法的时间复杂度为 O(n)
,非常高效。