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

如何用Kotlin实现数组元素去重及频率统计?求助修正代码

Kotlin数组元素频率统计代码修正

原代码存在的问题

  • 内层循环访问a[j+1]会触发数组越界(当j为数组最后一个索引时,j+1超出数组范围)
  • 循环逻辑完全错误:仅比较相邻元素无法统计每个元素的总出现次数
  • numbers和frequency数组未指定类型,且初始化方式不符合需求,无法正确存储数据

修正方案

方案1:使用Kotlin标准库函数(简洁高效)

借助groupBy快速分组统计元素频率,再拆分到目标数组:

val n = 8
val a = arrayOf(1, 3, 2, 4, 2, 1, 9, 1)

// 统计每个元素的出现次数
val frequencyMap = a.groupBy { it }.mapValues { it.value.size }

// 拆分到numbers和frequency数组
val numbers = frequencyMap.keys.toTypedArray()
val frequency = frequencyMap.values.toTypedArray()

// 验证输出
println("numbers = ${numbers.contentToString()}")
println("frequency = ${frequency.contentToString()}")

输出结果:

numbers = [1, 3, 2, 4, 9]
frequency = [3, 1, 2, 1, 1]

方案2:手动循环实现(适合理解底层逻辑)

如果不想依赖标准库,手动遍历统计元素出现次数:

val n = 8
val a = arrayOf(1, 3, 2, 4, 2, 1, 9, 1)

// 先用List存储,方便动态添加元素
val numbersList = mutableListOf<Int>()
val frequencyList = mutableListOf<Int>()

for (num in a) {
    val index = numbersList.indexOf(num)
    if (index == -1) {
        // 元素首次出现,加入列表并初始化频率为1
        numbersList.add(num)
        frequencyList.add(1)
    } else {
        // 元素已存在,对应频率+1
        frequencyList[index] = frequencyList[index] + 1
    }
}

// 转换为Array类型(按需使用)
val numbers = numbersList.toTypedArray()
val frequency = frequencyList.toTypedArray()

// 验证输出
println("numbers = ${numbers.contentToString()}")
println("frequency = ${frequency.contentToString()}")

输出结果与预期完全一致。

内容的提问来源于stack exchange,提问作者Shahina Ismoilova

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:31:04