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

如何在Swift 4中计算数组的所有众数?

解决多众数返回问题的Swift实现

我来帮你搞定这个问题!你的当前代码确实只能追踪出现次数最多的单个元素,当数组里有多个出现次数相同的众数时,就会漏掉其他的。比如数组[1,2,2,3,3],原代码只会返回2或者3中的一个,而正确的结果应该同时返回这两个数。

原代码的问题分析

原代码里的highestKeyPair变量只保存了一组键值对,遍历统计结果时,只会在遇到出现次数更大的元素时更新它。如果遇到出现次数和当前最大值相同的元素,代码会直接跳过,导致最终只能返回一个众数。

改进后的实现方案

我们可以调整思路:先统计所有元素的出现次数,找到最大的出现次数后,再把所有出现次数等于这个最大值的元素都收集起来。这样就能返回所有众数了:

func findModes() -> [Float] {
    // 统计每个数字的出现次数,用default简化判断逻辑
    var occurrences: [Int: Int] = [:]
    for number in array {
        occurrences[number, default: 0] += 1
    }
    
    // 处理空数组的边界情况
    guard let maxOccurrenceCount = occurrences.values.max() else {
        return []
    }
    
    // 筛选出所有出现次数等于最大值的数字,并转换为Float类型
    let modes = occurrences.filter { $0.value == maxOccurrenceCount }
                            .map { Float($0.key) }
    
    return modes
}

关键改进点

  • 简化统计逻辑:用occurrences[number, default: 0] += 1替代了原有的if-else判断,代码更简洁易读。
  • 支持多众数返回:将返回类型从单个Float改为[Float],这样可以一次性返回所有符合条件的众数。
  • 处理边界情况:当输入数组为空时,返回空数组,避免原代码返回错误的0.0结果。

比如调用这个函数处理数组[4,4,5,5,6],会返回[4.0,5.0],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:12