惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
B
Blog
P
Proofpoint News Feed
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
有赞技术团队
有赞技术团队
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
H
Help Net Security
罗磊的独立博客
L
LangChain Blog
GbyAI
GbyAI
腾讯CDC
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog

博客园 - Fanny123

LeetCode最大数字范围的整数之和 LeetCode统计好子数组 LeetCode边界与内部和相等的稳定子数组 三段式数组II 变为活跃状态的最小时间 平衡装运的最大数量 三段式数组 I 相邻字符串之间的最长公共前缀 分割字符串 找出数组中的所有 K 近邻下标 使叶子路径成本相等的最小增量 硬币面值还原 等积子集的划分方案 统计一个数组中好对子的数目 LeetCode 1482. 制作 m 束花所需的最少天数 C# 基础(更新中) 圆形靶内的最大飞镖数量 丑数 验证栈序列 BST的中序后继
检查元素频次是否为质数
Fanny123 · 2025-06-22 · via 博客园 - Fanny123

检查元素频次是否为质数

题目

第455场周赛

给你一个整数数组 nums。
如果数组中任一元素的 频次 是 质数,返回 true;否则,返回 false。
元素 x 的 频次 是它在数组中出现的次数。
质数是一个大于 1 的自然数,并且只有两个因数:1 和它本身。
 
示例 1:
输入: nums = [1,2,3,4,5,4]
输出: true
解释:
数字 4 的频次是 2,而 2 是质数。
示例 2:
输入: nums = [1,2,3,4,5]
输出: false
解释:
所有元素的频次都是 1。
示例 3:
输入: nums = [2,2,2,4,4]
输出: true
解释:
数字 2 和 4 的频次都是质数。

提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100©leetcode

题解

由于数组大小n和数组的数值都在一百以内,所以可以直接对100内的所有数值算出是否质数。注意要申请的数组大小需要是101 而不是100,不然当题目给出频次为100的数组时,会越界。

这里算是否是质数的逻辑是用了除法,如果它能被比自己小的数字整除,就不是质数。下界是2,上界是平方根。

    public class Solution {
    public bool CheckPrimeFrequency(int[] nums) {
        //统计所有频次
        Dictionary<int,int> dict=new Dictionary<int,int>();
    
        foreach(int v in nums){
            if(!dict.ContainsKey(v)) dict[v]=0;
            dict[v]=dict[v]+1;
        }

        // 100以内的所有zhishu
        bool[] allZhi=new bool[101];
        fillIsZhi(allZhi);

        foreach(int f in dict.Values){
            if(allZhi[f]){
                return true;
            }
        }    
        return false;
    }

    private void fillIsZhi(bool[] arr){
        arr[2]=true;
        for(int i=3;i<100;i++){
            arr[i]=true;
            for(int j=2;j<=Math.Sqrt(i);j++){
                if(i%j==0){//能被j整除,不是质数
                    arr[i]=false;
                    break;
                }
            }
        }
    }
}©leetcode

大佬解答

这个解答算是否质数用了反过来的思路,某个数的倍数都不是质数。

class Solution {
    public boolean checkPrimeFrequency(int[] nums) {
        int[] cnt = new int[200];
        for (int x : nums) {
            cnt[x]++;
        }
        for (int x : cnt) {
            if (x > 0 && !np[x]) {
                return true;
            }
        }
        return false;
    }
    
   static int N = 200;
    static boolean[] np = new boolean[N];
    static {
        np[0] = np[1] = true;
        for (int i = 2; i < N; i++) {
            if (!np[i]) {
                for (int j = i + i; j < N; j += i) {
                    np[j] = true;
                }
            }
        }
    }
}