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

Java如何统计数组中仅出现一次的唯一值数量

问题分析

原代码的逻辑是统计数组去重后的元素总个数,未判断元素的出现次数是否恰好为1,因此不符合需求。

解决方案

方案1:基于原有排序逻辑改造

排序后相同元素会连续排列,遍历过程中统计每个元素的连续出现次数,仅当次数为1时累加计数。

import java.util.Arrays;

public class UniqueCounter {
    public static int countSingleOccurrence(int[] n) {
        if (n.length == 0) {
            return 0;
        }
        Arrays.sort(n);
        int result = 0;
        int currentOccurCount = 1;
        for (int i = 1; i < n.length; i++) {
            if (n[i] == n[i - 1]) {
                currentOccurCount++;
            } else {
                if (currentOccurCount == 1) {
                    result++;
                }
                currentOccurCount = 1;
            }
        }
        // 补充判断最后一个元素的出现次数
        if (currentOccurCount == 1) {
            result++;
        }
        return result;
    }
}

方案2:基于哈希表统计(时间复杂度更优)

先遍历数组统计每个元素的出现频率,再遍历频率表统计出现次数为1的元素数量,时间复杂度为O(n),更适合数据量较大的场景。

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

public class UniqueCounter {
    public static int countSingleOccurrence(int[] n) {
        Map<Integer, Integer> freqMap = new HashMap<>();
        // 第一次遍历统计所有元素的出现次数
        for (int num : n) {
            freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);
        }
        int result = 0;
        // 第二次遍历统计出现次数恰好为1的元素数量
        for (int freq : freqMap.values()) {
            if (freq == 1) {
                result++;
            }
        }
        return result;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:42:01