iT邦幫忙

2022 iThome 鐵人賽

DAY 4
1

「今天我們來解 268. Missing Number。兩位有什麼想法嗎?」

「我試試看!」菁菁很快的看過題目,寫了一版內容

class Solution {  
    fun missingNumber(nums: IntArray): Int {  
        for (i in 0..nums.size) {  
            if (!nums.contains(i)) {  
                return i  
            }  
        }  
        return 0  
    }  
}

「不錯耶!竟然知道用 contains(),很厲害喔!」

「嘿嘿——我都已經先寫過程式了,不能輸給曉欣太多呀!」

「菁菁好厲害!這個函數在哪邊看到的呀?」

「我剛好在逛天瓏書局的時候,看到這本書,就買回去看了」菁菁一邊說,一邊從背包拿出一本《Kotlin Collection全方位解析攻略 : 精通原理及實戰,寫出流暢好維護的程式》

「如果用這個概念去思考的話,可以用另一種寫法,會更直覺喔。」夏天一邊說,一邊修改菁菁剛剛寫的程式:

class Solution {
    fun missingNumber(nums: IntArray): Int {
        for(i in 0..nums.size) {
            if(!(i in nums)) {
                return i
            }
        }
        return 0
    }
}

送出答案通過之後,兩個人目瞪口呆。

「原來還可以這樣,Kotlin 這個程式語言太有趣了吧。」

「咦,夏姐你剛剛說『如果用這個概念去思考的話』,所以還可以用其他的想法思考嗎?」

「這就讓你們兩位想看看囉!我有點餓,先去買個東西吃」夏天邊說邊放下手中的摩卡,走向櫃檯點餐。

兩個人開始拿出紙筆,在紙上討論自己的想法。

「啊!我想到了」一陣子過後,菁菁突然說。「既然只要知道陣列的大小,就可以知道所有元素都存在時的總和。那麼,只要減去實際拿到陣列的總和,不就可以知道缺少哪個元素了嗎?」

「好像有點理解,可是這樣寫不會比較慢嗎?」曉欣邊說邊寫

class Solution {  
    fun missingNumber(nums: IntArray): Int {  
        var result = 0  
        for (num in nums) {  
            result += num  
        }  
        return (nums.size * (nums.size + 1)) / 2 - result  
    }  
}

「喔!曉欣學的很紮實耶!已經會用 for 實作陣列的加總了!」夏天剛好端著一盤食物回來,看起來是買了三人份的食物。

「嘿嘿!這就是我新買的書派上用場的地方囉!」菁菁一邊說,一邊改剛剛曉欣寫好的程式

class Solution {  
    fun missingNumber(nums: IntArray): Int {
        return (nums.size * (nums.size + 1)) / 2 - nums.sum()
    }  
}

「哇!這樣我就懂了,確實簡潔很多耶!」曉欣興奮的說

「對呀!再加上你上次教我的方法的話⋯⋯」菁菁邊說邊改

class Solution {  
    fun missingNumber(nums: IntArray): Int = 
    (nums.size * (nums.size + 1)) / 2 - nums.sum()
}

「沒錯!你們兩個都很厲害喔!這些是請兩位吃的!」

「謝謝夏姐!然後剛剛菁菁說的『天瓏書局』,是在哪裡呀?」

「你沒去過天瓏書局嗎?裡面超多好書的!等等吃完我們就去逛逛!」菁菁邊說,邊拿起夏天剛買的黑森林蛋糕,直接開始大快朵頤起來。


上一篇
Day 03:刺激的 Fizz Buzz 除錯經驗:412. Fizz Buzz
下一篇
Day 05:找出落單的同伴:136. Single Number
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言