使用kotlin解答这个题目:2418. 按身高排序 提示 简单 83 相关企业 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1: 输入:names = ["Mary","John","Emma"], heights = [180,165,170] 输出:["Mary","Emma","John"] 解释:Mary 最高,接着是 Emma 和 John 。 示例 2: 输入:names = ["Alice","Bob","Bob"], heights = [155,185,150] 输出:["Bob","Alice","Bob"] 解释:第一个 Bob 最高,然后是 Alice 和第二个 Bob 。 提示: n == names.length == heights.length 1 <= n <= 103 1 <= names[i].length <= 20 1 <= heights[i] <= 105 names[i] 由大小写英文字母组成 heights 中的所有值互不相同
时间: 2024-02-03 22:03:24 浏览: 121
```kotlin
fun sortByHeight(names: Array<String>, heights: IntArray): Array<String> {
val map = mutableMapOf<Int, String>()
for (i in names.indices) {
map[heights[i]] = names[i]
}
return map.toSortedMap(reverseOrder())
.values.toTypedArray()
}
```
首先将名字和身高对应起来,放入一个 map 中。然后使用 `toSortedMap()` 将 map 按照键值排序,默认是升序,这里使用 `reverseOrder()` 使其降序排列。最后只需要返回排好序的名字数组即可。
相关问题
使用kotlin解答这个题目:2418. 按身高排序 提示 简单 83 相关企业 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1: 输入:names = ["Mary","John","Emma"], heights = [180,165,170] 输出:["Mary","Emma","John"] 解释:Mary 最高,接着是 Emma 和 John 。 示例 2: 输入:names = ["Alice","Bob","Bob"], heights = [155,185,150] 输出:["Bob","Alice","Bob"] 解释:第一个 Bob 最高,然后是 Alice 和第二个 Bob 。 提示: n == names.length == heights.length 1 <= n <= 103 1 <= names[i].length <= 20 1 <= heights[i] <= 105 names[i] 由大小写英文字母组成 heights 中的所有值互不相同
```kotlin
fun sortNamesByHeight(names: Array<String>, heights: IntArray): Array<String> {
val n = names.size
for (i in 0 until n - 1) {
for (j in i + 1 until n) {
if (heights[i] < heights[j]) {
// 如果 i 的身高比 j 的身高小,则交换 i 和 j 对应的元素
val tmpName = names[i]
val tmpHeight = heights[i]
names[i] = names[j]
heights[i] = heights[j]
names[j] = tmpName
heights[j] = tmpHeight
}
}
}
return names
}
// 测试代码
fun main() {
val names = arrayOf("Mary", "John", "Emma")
val heights = intArrayOf(180, 165, 170)
val sortedNames = sortNamesByHeight(names, heights)
println(sortedNames.contentToString()) // 输出 ["Mary", "Emma", "John"]
}
```
使用kotlin解决这个问题:1487. 保证文件名唯一 提示 中等 131 相关企业 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。 返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。
以下是使用 Kotlin 解决该问题的代码:
```kotlin
fun getUniqueNames(names: Array<String>): Array<String> {
val map = mutableMapOf<String, Int>()
val result = Array(names.size) { "" }
for (i in 0 until names.size) {
val name = names[i]
if (map.containsKey(name)) {
val count = map[name]!! + 1
var uniqueName = "$name($count)"
while (map.containsKey(uniqueName)) {
uniqueName = "$name(${++count})"
}
map[name] = count
result[i] = uniqueName
map[uniqueName] = 0
} else {
result[i] = name
map[name] = 0
}
}
return result
}
```
该函数接受一个字符串数组 `names`,返回一个与 `names` 相同长度的字符串数组 `result`,其中 `result[i]` 是第 `i` 个文件夹实际名称。该函数使用一个 `map` 来记录文件名出现的次数,并根据需要添加后缀来保证文件名唯一。
具体实现是,遍历 `names` 数组,对于每个文件名,如果在 `map` 中已经存在,说明需要添加后缀,就取出该文件名出现的次数,加一后作为后缀。如果该后缀也已经存在,就继续加一,直到找到一个不存在的后缀为止。然后将文件名和后缀更新到 `map` 中,将实际名称更新到 `result` 中。如果文件名在 `map` 中不存在,说明可以直接使用,将其更新到 `map` 和 `result` 中即可。
阅读全文