矮桌上出現兩杯熱牛奶。
喝了再上!
為了方便找陣列相關題目,我讓學妹加上新的標籤條件。
新的題目1920. Build Array from Permutation是將陣列重新按照陣列內容排序。
學妹表示這個題目和上一個一樣簡單,很快就作答完畢。
class Solution {
fun buildArray(nums: IntArray): IntArray {
return IntArray(nums.size) { nums[nums[it]] }
}
}
⋯⋯桌上又來兩杯熱牛奶。
於是我挑了一個稍微加點難度的,1480. Running Sum of 1d Array
要求內部陣列數字加總,應該能讓學妹不得不花點時間回想迴圈語法,我是這樣打算的⋯⋯結果學妹居然還是沒用迴圈,而是把陣列拿去切片算總和!
class Solution {
fun runningSum(nums: IntArray): IntArray {
return IntArray(nums.size) { nums.slice(0..it).sum() }
}
}
「Kotlin Collections實在太寵壞妳了。」我扶額。這個方法絕對不能說錯,但是很明顯浪費資源,明明新的加總可以利用前一個的加總,結果她偏偏每個都重新計算。
「先別關掉,照我說的送另一個寫法,比較一下妳的寫法和我的寫法在電腦花的時間和空間差異。」
class Solution {
fun runningSum(nums: IntArray): IntArray {
return IntArray(nums.size) {
nums[it] += if(it - 1 >= 0) nums[it - 1] else 0
nums[it]
}
}
}
Runtime: 562 ms
Memory Usage: 68.8 MB
Runtime: 304 ms
Memory Usage: 37.4 MB
「學姐的寫法用的時間和空間都只需要我的六成。」學妹啞然。
「當然囉,我重複利用空間,Kotlin陣列雖然長度不能改,但是內容是可以覆蓋的。」等等,為啥我也不自覺的避開了迴圈寫法?
我讓學妹趕緊的送了一個迴圈寫法出去,果然又省下更多的時間和空間。
class Solution {
fun runningSum(nums: IntArray): IntArray {
repeat(nums.size) {
nums[it] += if(it - 1 >= 0) nums[it - 1] else 0
}
return nums
}
}
Runtime: 288 ms
Memory Usage: 36.8 MB
正想再研究看看有沒有更多的寫法,學妹阻止了我:「學姊,牛奶會喝不完的。」
桌上六杯牛奶,挺壯觀的。
「好吧。先喝牛奶。」我隨手拿了一杯,喝進口後呆了一下。「這杯加了蜂蜜!」
學妹已經喝完了,她看著我認真的說:「最後這杯蜂蜜加的更多,也許越省時間空間的解法,獎品品質會更好?」