📜  门| GATE CS 1999 |问题9(1)

📅  最后修改于: 2023-12-03 14:58:18.956000             🧑  作者: Mango

门 | GATE CS 1999 | 问题9

该问题是计算机科学与工程考试门(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),非常高效。