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
相关产品推荐
相关产品推荐

