Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

Kotlin Leetcode - 1365. How Many Numbers Are Smaller Than the Current Number

題目連接:https://leetcode.com/problems/how-many-numbers-are-smaller-than-the-current-number/

class Solution {
    fun smallerNumbersThanCurrent(nums: IntArray): IntArray {

	}
}

解題思路

這一題可以直接用雙重迴圈處理

利用函式編程風格的 mapfilter

可以在單一表達式內完成

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 列表