kotlin 求数组的度:给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。
时间: 2024-03-24 08:39:46 浏览: 56
可以使用 HashMap 来解决此问题。首先使用 HashMap 存储每个数字出现的次数以及第一次出现的索引位置。然后遍历 HashMap,找到出现次数最多的数字,并计算其第一次出现和最后一次出现的位置之差,即为数组的度。
示例代码:
```kotlin
fun findShortestSubArray(nums: IntArray): Int {
val map = mutableMapOf<Int, IntArray>() // 存储数字出现的次数和第一次出现的位置
var maxCount = 0 // 数组的度
var minLen = Int.MAX_VALUE // 最短的子数组长度
// 遍历数组,记录每个数字出现的次数和第一次出现的位置
for (i in nums.indices) {
val num = nums[i]
if (map.containsKey(num)) {
map[num]!![0]++
map[num]!![2] = i
} else {
map[num] = intArrayOf(1, i, i)
}
maxCount = maxOf(maxCount, map[num]!![0])
}
// 遍历 HashMap,找到出现次数最多的数字,并计算其第一次出现和最后一次出现的位置之差
for ((_, value) in map) {
if (value[0] == maxCount) {
minLen = minOf(minLen, value[2] - value[1] + 1)
}
}
return minLen
}
```
在上面的示例代码中,我们首先创建一个空的 HashMap,用于存储每个数字出现的次数和第一次出现的位置。然后遍历数组,记录每个数字出现的次数和第一次出现的位置,并更新数组的度。最后遍历 HashMap,找到出现次数最多的数字,并计算其第一次出现和最后一次出现的位置之差,即为数组的度。
阅读全文