📜  门| GATE 2017 MOCK II |第59章(1)

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

门| GATE 2017 MOCK II |第59章

简介

本文介绍了GATE 2017 MOCK II考试中的第59章题目。该题目是专为程序员设计的,要求学生解决一个与程序设计和算法相关的问题。

题目描述

题目的具体描述如下:

给定一个长度为n的整数数组A,其中n为正整数。你需要编写一个函数,找到数组中出现次数最多的元素,并将其返回。

函数签名如下:

findMostFrequentElement(int[] A) -> int


输入:
- 数组A(1 <= n <= 10^5,-10^9 <= A[i] <= 10^9)

输出:
- 返回数组A中出现次数最多的元素。

注意:
- 如果有多个元素出现的次数相同且都是最多次数,则返回其中任意一个元素即可。

示例:

Input: [1, 2, 3, 2, 1, 2, 3, 3, 2] Output: 2


请编写一个函数 findMostFrequentElement 来实现上述功能,并返回结果。


## 解题思路

该问题可以通过使用哈希表来解决。使用哈希表可以有效地统计数组中每个元素的出现次数,并找到出现次数最多的元素。

算法步骤如下:

1. 创建一个空的哈希表 `counter`。
2. 遍历数组A,对于每个元素,将其作为键值查找哈希表。
   - 如果哈希表中不存在该键值,则将该键值插入哈希表,并将值设为1。
   - 如果哈希表中已存在该键值,则将其对应的值加1。
3. 遍历哈希表,找到值最大的键值。
4. 返回该键值作为结果。

## 代码实现

下面是使用Java语言实现的代码片段:

```java
import java.util.HashMap;
import java.util.Map;

public class Main {

    public static int findMostFrequentElement(int[] A) {
        Map<Integer, Integer> counter = new HashMap<>();

        for (int num : A) {
            if (counter.containsKey(num)) {
                counter.put(num, counter.get(num) + 1);
            } else {
                counter.put(num, 1);
            }
        }

        int maxElement = 0;
        int maxCount = 0;
        for (Map.Entry<Integer, Integer> entry : counter.entrySet()) {
            int key = entry.getKey();
            int count = entry.getValue();
            if (count > maxCount) {
                maxCount = count;
                maxElement = key;
            }
        }

        return maxElement;
    }

    public static void main(String[] args) {
        int[] A = {1, 2, 3, 2, 1, 2, 3, 3, 2};
        int result = findMostFrequentElement(A);
        System.out.println("The most frequent element is: " + result);
    }
}
复杂度分析

该算法的时间复杂度为O(n),其中n为数组A的长度。哈希表的操作都是常数时间复杂度的。空间复杂度为O(n),主要用于存储哈希表。