「今天我們來解 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()
}
「沒錯!你們兩個都很厲害喔!這些是請兩位吃的!」
「謝謝夏姐!然後剛剛菁菁說的『天瓏書局』,是在哪裡呀?」
「你沒去過天瓏書局嗎?裡面超多好書的!等等吃完我們就去逛逛!」菁菁邊說,邊拿起夏天剛買的黑森林蛋糕,直接開始大快朵頤起來。