使用kotlin完成这个题目:1093. 大样本统计 提示 中等 69 相关企业 我们对 0 到 255 之间的整数进行采样,并将结果存储在数组 count 中:count[k] 就是整数 k 在样本中出现的次数。 计算以下统计数据: minimum :样本中的最小元素。 maximum :样品中的最大元素。 mean :样本的平均值,计算为所有元素的总和除以元素总数。 median : 如果样本的元素个数是奇数,那么一旦样本排序后,中位数 median 就是中间的元素。 如果样本中有偶数个元素,那么中位数median 就是样本排序后中间两个元素的平均值。 mode :样本中出现次数最多的数字。保众数是 唯一 的。 以浮点数数组的形式返回样本的统计信息 [minimum, maximum, mean, median, mode] 。与真实答案误差在 10-5 内的答案都可以通过。
时间: 2024-02-18 19:00:21 浏览: 158
好的,这是一个非常有趣的问题!以下是我使用 Kotlin 编写的另一种解决方案:
```kotlin
fun sampleStats(count: IntArray): DoubleArray {
val result = DoubleArray(5)
var sum = 0L
var cnt = 0L
var mode = -1
var modeCnt = 0
var max = -1
var min = -1
var median1 = -1
var median2 = -1
for (i in 0..255) {
if (count[i] > 0) {
if (min == -1) min = i
max = i
sum += i * count[i]
cnt += count[i]
if (count[i] > modeCnt) {
modeCnt = count[i]
mode = i
}
}
}
result[0] = min.toDouble()
result[1] = max.toDouble()
result[2] = sum.toDouble() / cnt
var acc = 0L
var medianFound = false
for (i in 0..255) {
acc += count[i]
if (!medianFound && acc >= cnt / 2 + 1) {
result[3] = i.toDouble()
medianFound = true
if (cnt % 2 == 0L) {
median1 = i
}
}
if (cnt % 2 == 0L && acc == cnt / 2) {
median1 = i
}
}
if (cnt % 2 == 0L) {
acc = 0L
for (i in 0..255) {
acc += count[i]
if (acc >= cnt / 2 + 1) {
median2 = i
break
}
}
result[3] = (median1 + median2).toDouble() / 2
}
result[4] = mode.toDouble()
return result
}
```
在这个算法中,我们遍历整个计数数组,并计算最小值、最大值、平均值和众数。我们还计算了每个元素的总和和计数,以便计算平均值和中位数。然后,我们根据样本的元素数目计算中位数。如果样本元素数目是奇数,我们简单地找到中间的元素。否则,我们需要找到中间两个元素的平均值。最后,我们将所有结果作为浮点数数组返回。
希望这可以帮助您完成您的工作!
阅读全文