使用C#实现样本众数查找功能时代码输出错误,问题出在哪里
代码存在两处核心逻辑错误
- 第一处:第二个遍历字典的循环中,你往结果集添加的是出现次数
max,而非对应的数组元素key,这是输出结果为1、3的直接原因,这两个值实际是过程中记录的最高出现次数,不是数组里的元素。 - 第二处:缺少两个关键逻辑分支处理:
- 当找到出现次数高于当前
max的元素时,没有清空之前存入的旧结果,会把历史错误值保留下来 - 没有判断出现次数和当前
max相等的场景,多个众数的情况下,后续平次数的元素不会被加入结果
- 当找到出现次数高于当前
修正后的代码
static List<int> Mode(int[] array) { if (array.Length == 0) { throw new ArgumentException("Sample can't be empty"); } List<int> result = new List<int>(); var counts = new Dictionary<int, int>(); int max = 0; // 统计元素出现次数的逻辑无问题 foreach (int num in array) { counts[num] = counts.ContainsKey(num) ? counts[num] + 1 : 1; } foreach (var key in counts.Keys) { if (counts[key] > max) { max = counts[key]; result.Clear(); result.Add(key); } else if (counts[key] == max) { result.Add(key); } } return result; }
内容的提问来源于stack exchange,提问作者BBB
相关产品推荐
相关产品推荐

