You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求排查:自定义数组众数出现频次计算函数的错误问题

问题排查与修正

我来帮你找出这个函数的问题所在!你的代码逻辑在处理不同元素切换时的计数重置环节出现了漏洞,导致统计频次错误。

错误原因分析

先看你代码里的核心逻辑块:

else{
    if(max>m){
        m=max;
        max=1;
    }
}

这里的问题是:只有当当前计数max大于记录的最大频次m时,才会把max重置为1;如果max不大于m,max会保持原来的数值,不会重置。

拿你提到的输入数组[1,2,3,1,2,3,3,3]来说,排序后是[1,1,2,2,3,3,3,3],我们一步步走错误流程:

  1. 前两个1统计后,max=2,m被更新为2,max重置为1;
  2. 接下来两个2统计后,max=2,此时max不大于m(2=2),所以if(max>m)不执行,max仍然是2,没有被重置;
  3. 后续遇到连续的3时,max从2开始累加:i=5时max=3,i=6时max=4,i=7时max=5;
  4. 循环结束后,max=5>m=2,m被更新为5,最终返回错误的5。

修正后的代码

解决方法很简单:不管max是否大于m,只要切换到不同元素,都要把max重置为1(重置前先判断是否要更新m即可)。另外建议加上空数组的边界判断,让函数更健壮:

public static int findMaxFrequency(int[] arr) {
    if (arr == null || arr.length == 0) {
        return 0;
    }
    Arrays.sort(arr);
    int currentCount = 1; // 重命名变量,让逻辑更易读
    int maxCount = 1;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] == arr[i-1]) {
            currentCount++;
        } else {
            if (currentCount > maxCount) {
                maxCount = currentCount;
            }
            currentCount = 1; // 强制重置为1,不管之前的计数大小
        }
    }
    // 最后检查最后一组元素的统计结果
    if (currentCount > maxCount) {
        maxCount = currentCount;
    }
    return maxCount;
}

验证修正效果

用你的测试数组[1,2,3,1,2,3,3,3]测试:

  • 排序后处理到两个2时,currentCount=2,不大于maxCount=2,所以不更新maxCount,但currentCount被重置为1;
  • 后续连续的3从currentCount=1开始累加,最终得到currentCount=4;
  • 循环结束后,currentCount=4>maxCount=2,maxCount更新为4,返回正确结果。

内容的提问来源于stack exchange,提问作者QUEST275

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:42:46