使用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 16:03:24 浏览: 18
```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完成这个题目:459. 重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
这道题可以使用字符串匹配的方法来解决。
具体来说,我们可以将原始字符串 s 拼接自身,然后去掉开头和结尾两个字符,这样得到的字符串一定包含原始字符串 s。
接下来,我们可以使用 KMP 算法或者 Z 算法来求出该字符串的前缀函数或者 Z 函数,然后判断原始字符串 s 的长度是否等于这个函数的最后一个值,如果是,说明原始字符串 s 可以由一个子串重复多次构成。
具体实现可以参考以下代码:
```kotlin
fun repeatedSubstringPattern(s: String): Boolean {
val n = s.length
val str = s + s
val pi = IntArray(n * 2)
var j = 0
for (i in 1 until n * 2) {
while (j > 0 && str[i] != str[j]) {
j = pi[j - 1]
}
if (str[i] == str[j]) {
j++
}
pi[i] = j
}
return pi[n * 2 - 1] != 0 && n % (n - pi[n * 2 - 1]) == 0
}
```
其中,`pi` 数组表示字符串 `str` 的前缀函数,`j` 表示匹配的长度,初始值为 `0`。
在循环中,我们不断地向右移动指针 `i`,并且不断地将 `j` 更新为 `pi[j-1]`,直到 `str[i]` 和 `str[j]` 相等,或者 `j` 为 `0`。如果 `str[i]` 和 `str[j]` 相等,我们就将 `j` 增加 1,并且将 `pi[i]` 赋值为 `j`。
最后,我们判断 `pi[n*2-1]` 是否为 0,并且判断 `n` 是否能被 `n-pi[n*2-1]` 整除。如果是,说明原始字符串 s 可以由一个子串重复多次构成,返回 true,否则返回 false。
希望能对你有所帮助!
使用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` 中即可。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)