int[]数组中仅出现一次元素的次数打印问题求助
解决数组中仅出现一次数字的次数统计问题
嘿,我完全懂你现在的困扰——本来想统计数组里那些只出现一次的数字的情况,结果现在的代码只能输出某个由count定义的固定数字的次数,完全没达到预期。咱们一步步拆解问题,把它搞定。
问题根源分析
我猜你之前的代码大概是类似这样的:硬编码了某个特定数字,然后遍历数组统计它的次数,比如:
// 错误示例(Java) int[] arr = {1,2,2,3,4,4}; int count = 0; int target = 1; // 固定死了要统计的数字 for(int num : arr){ if(num == target) count++; } System.out.println(count);
或者是在遍历的时候临时判断,但逻辑没处理好,导致只抓到了某一个符合条件的数字,而不是所有。核心问题就是没有先全局统计所有元素的出现频率,而是只针对单个数字做了统计。
正确解决方案:先统计频率,再筛选结果
解决思路很清晰:先遍历数组,把每个数字的出现次数记录下来,然后再从记录里找出那些次数为1的数字,输出它们的信息(或者统计这样的数字总数)。
示例代码(Java)
import java.util.HashMap; import java.util.Map; public class UniqueNumberStats { public static void main(String[] args) { int[] numbers = {2, 3, 2, 4, 5, 4, 6, 7, 7}; // 第一步:用HashMap统计每个数字的出现次数 Map<Integer, Integer> frequencyMap = new HashMap<>(); for (int num : numbers) { // 若数字已存在,次数+1;不存在则初始化为1 frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } // 第二步:筛选并输出仅出现一次的数字及其次数 System.out.println("仅出现一次的数字及对应次数:"); int totalUniqueNumbers = 0; for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) { if (entry.getValue() == 1) { System.out.printf("数字 %d:%d 次\n", entry.getKey(), entry.getValue()); totalUniqueNumbers++; } } // 可选:统计这类数字的总数 System.out.printf("\n一共有 %d 个仅出现一次的数字\n", totalUniqueNumbers); } }
示例代码(Python)
def analyze_unique_numbers(arr): # 第一步:用字典统计频率 frequency_dict = {} for num in arr: frequency_dict[num] = frequency_dict.get(num, 0) + 1 # 第二步:筛选并输出结果 print("仅出现一次的数字及对应次数:") unique_total = 0 for num, count in frequency_dict.items(): if count == 1: print(f"数字 {num}:{count} 次") unique_total += 1 print(f"\n一共有 {unique_total} 个仅出现一次的数字") # 测试用例 test_array = [2, 3, 2, 4, 5, 4, 6, 7, 7] analyze_unique_numbers(test_array)
为什么这个方法有效?
通过哈希表(Java的HashMap/ Python的字典),我们可以一次性把数组里所有元素的出现次数都记录下来,相当于建立了一个“数字-次数”的映射表。之后只需要遍历这个映射表,就能轻松筛选出所有次数为1的数字,而不是局限于某个固定数字。
这样修改之后,不管数组里有多少个仅出现一次的数字,都能被准确统计和输出啦。
内容的提问来源于stack exchange,提问作者jhm
相关产品推荐
相关产品推荐

