Kotlin Leetcode - 1365. How Many Numbers Are Smaller Than the Current Number
class Solution {
fun smallerNumbersThanCurrent(nums: IntArray): IntArray {
}
}
解題思路
這一題可以直接用雙重迴圈處理
利用函式編程風格的 map
和 filter
可以在單一表達式內完成
Kotlin 參考解答
點擊展開解答
單一表達式內完成的方式如下
class Solution {
fun smallerNumbersThanCurrent(nums: IntArray) =
nums.map { value ->
nums.filter { num -> num < value }.size
}.toIntArray()
}
由於 leetcode 的檢查允許 List<Int>
做為答案
我們可以省略 toIntArray()
的步驟
class Solution {
fun smallerNumbersThanCurrent(nums: IntArray) =
nums.map { value ->
nums.filter { num -> num < value }.size
}
}
要節省時間,我們可以先對陣列做排序
這樣可以少比對一些元素
class Solution {
fun smallerNumbersThanCurrent(nums: IntArray): IntArray {
val result = IntArray(nums.size)
val sortedNums = nums.toMutableList()
sortedNums.sort()
val counts = mutableMapOf<Int,Int>()
sortedNums.forEachIndexed { index, item ->
if (!counts.contains(item)) {
counts[item] = index
}
}
nums.forEachIndexed { index, item ->
result[index] = counts[item] ?: throw Exception()
}
return result
}
}
回到 leetcode 列表