如何从整数数组中找出由所有不同值组成的最大组数
解决数组可组成完整唯一元素组的数量问题
先通过两个实际例子明确问题场景:
- 给定数组
{2,4,2,4,3,2,3},去重后得到唯一元素集合{2,3,4}。统计每个元素的出现次数:2出现3次,3出现2次,4出现2次。能组成的完整组(每组必须包含所有唯一元素)的数量就是最小的元素出现次数,也就是2组。 - 再比如数组
{1,2,1,3,4,4,3,3},去重后是{1,2,3,4},各元素计数:1出现2次,2出现1次,3出现3次,4出现2次。最小计数是1,所以只能组成1组。
我的Java实现方案
核心思路是先统计每个元素的出现频率,再找到频率的最小值,这个值就是能组成的完整组数量:
int arr[] = {2,3,4,2,4,3,2}; Map<Integer, Integer> map = new HashMap<>(); // 遍历数组,统计每个元素的出现次数 for(int i = 0; i < arr.length; i++) { int count = map.getOrDefault(arr[i], 0) + 1; map.put(arr[i], count); } // 找出所有元素出现次数中的最小值 int min = Integer.MAX_VALUE; for(int count : map.values()) { if(count < min) { min = count; } } System.out.println("可组成的完整组数量:" + min);
思路拆解
- 统计元素频率:用HashMap记录每个元素的出现次数,
getOrDefault方法可以简化不存在元素的计数初始化(默认取0,再加1),避免空指针问题。 - 确定最大组数:因为每个完整组都必须包含所有唯一元素,所以能组成的组数完全受限于出现次数最少的元素——它的出现次数就是最多能组成的完整组数量。
内容的提问来源于stack exchange,提问作者Manoj Suthar
相关产品推荐
相关产品推荐

