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

Java如何统计数组输入值次数并找出出现次数最少的最小数值

问题代码错误分析及修复

原代码存在的问题

  • 计数器数组长度设置错误:输入数字范围是1100,原代码将counter数组长度设为n,当输入数字大于等于n时会直接触发数组越界异常,正确长度应设为101(覆盖下标0100,忽略未使用的下标0即可)
  • 遍历查找答案的循环边界错误:原代码用统计得到的最大出现次数max作为数字遍历的上限,完全不符合逻辑,数字的遍历范围应为1~100
  • 冗余逻辑:统计最大出现次数max的代码段对实现「找出现次数最少的数字」没有任何作用,可直接删除

修正后的完整代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int ans = -1;
        // 计数器数组长度设为101,适配1~100的输入数字
        int[] counter = new int[101];
        for (int i = 0; i < n; i++) {
            int num = scanner.nextInt();
            counter[num] += 1;
        }
        // 遍历1~100所有可能的输入数字,找符合要求的结果
        for (int i = 1; i <= 100; i++) {
            if (counter[i] > 0) {
                // 首次赋值、当前数字出现次数更少、次数相同但数字更小三种情况更新结果
                if (ans == -1 || counter[i] < counter[ans] || (counter[i] == counter[ans] && i < ans)) {
                    ans = i;
                }
            }
        }
        System.out.print(ans);
        scanner.close();
    }
}

关键逻辑说明

遍历1~100的数字时,因为是从小到大遍历,其实可以简化判断条件:当遇到出现次数比当前结果更少的数字时更新结果即可,相同出现次数的数字因为先遍历到更小的,后续相同次数的更大数字不会触发更新,天然满足次数相同时取更小值的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:30:00