素数元素的统计 | 豆包MarsCode AI刷题

88 阅读4分钟

题目解析

本题要求我们统计一个整数数组中,有多少个元素既是素数,且它们的出现次数也是素数。这个问题可以分为以下几个步骤来解决:

  1. 统计元素出现次数:首先,我们需要统计数组中每个元素出现的次数。这可以通过使用一个HashMap来实现,其中键是数组中的元素,值是该元素出现的次数。
  2. 判断素数:接下来,我们需要判断每个元素及其出现次数是否都是素数。素数是指只能被1和它本身整除的大于1的自然数。
  3. 统计满足条件的元素个数:最后,我们将统计满足上述条件的元素个数。

代码详解与分析

在之前的解析中,我们已经了解了题目的要求和解题思路。现在,让我们结合代码,进一步分析和理解这个问题的解决方案。

import java.util.*;

public class Main {
    public static int solution(List<Integer> a) {
        // 1. 统计元素出现次数
        Map<Integer, Integer> countMap = new HashMap<>();
        for (int num : a) {
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }

        // 2. 统计满足条件的元素个数
        int count = 0;
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            int num = entry.getKey();
            int freq = entry.getValue();
            // 判断元素和出现次数是否都为素数
            if (isPrime(num) && isPrime(freq)) {
                count++;
            }
        }

        return count;
    }

    // 3. 判断一个数是否为素数
    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(solution(Arrays.asList(1, 2, 3, 2, 5, 7, 7, 7, 5)) == 3);
        System.out.println(solution(Arrays.asList(1, 4, 6, 8, 10, 12)) == 0);
        System.out.println(solution(Arrays.asList(3, 3, 3, 5, 5, 5, 5)) == 1);
    }
}

代码分析

  1. 统计元素出现次数

    • 使用HashMap来存储每个元素及其出现次数。HashMapput方法在这里用来更新元素的计数。如果元素不在HashMap中,getOrDefault方法会返回默认值0,然后我们将其加1后存回HashMap
  2. 统计满足条件的元素个数

    • 遍历countMap中的每个条目,使用Map.Entry来同时获取键(元素)和值(出现次数)。
    • 对于每个元素,使用isPrime函数检查它和它的出现次数是否都是素数。如果是,计数器count增加。
  3. 判断素数

    • isPrime函数首先检查传入的数是否小于等于1,因为1和负数都不是素数。
    • 然后,使用一个循环从2开始,检查到该数的平方根。如果在这个范围内找到任何能整除该数的数,那么这个数不是素数,函数返回false
    • 如果循环结束都没有找到能整除的数,那么这个数是素数,函数返回true

知识总结

新知识点梳理分析

  • HashMap的使用:HashMap是一种基于哈希表的Map接口实现,它存储键值对,并允许我们快速地插入、删除和访问元素。在这个问题中,HashMap用于统计数组中每个元素的出现次数。
  • 素数的判断:判断一个数是否为素数是算法中的一个常见问题。一个高效的方法是只检查到该数的平方根,因为如果一个数有大于其平方根的因子,那么它必定也有小于或等于其平方根的因子。

个人理解和学习建议

  • 算法效率:在判断素数时,只检查到平方根可以显著提高算法的效率。这是一个重要的优化技巧,对于处理大数据集时尤为重要。
  • 数据结构选择:HashMap是统计元素出现次数的理想数据结构,因为它提供了快速的查找和插入操作。选择合适的数据结构可以简化问题并提高代码的效率。
  • 代码可读性:代码的可读性对于维护和理解代码至关重要。在这个问题中,函数的命名和结构清晰,使得代码易于理解。

个人思考与分析

在这个问题中,我们使用了HashMap来统计元素的出现次数,这是一个非常合适的数据结构选择,因为它提供了快速的查找和插入操作。