iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

矮桌上出現兩杯熱牛奶。

喝了再上!

為了方便找陣列相關題目,我讓學妹加上新的標籤條件。

截圖 2022-09-12 下午3 19 32

新的題目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

正想再研究看看有沒有更多的寫法,學妹阻止了我:「學姊,牛奶會喝不完的。」

桌上六杯牛奶,挺壯觀的。

「好吧。先喝牛奶。」我隨手拿了一杯,喝進口後呆了一下。「這杯加了蜂蜜!」

學妹已經喝完了,她看著我認真的說:「最後這杯蜂蜜加的更多,也許越省時間空間的解法,獎品品質會更好?」


上一篇
Day05: 解題先從建立信心開始
下一篇
Day07: 我布這個局布了十年之久
系列文
不解題就不能離開的房間31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言