題目連結:
題目意譯:
給定一個從數列 0, 1, 2, ..., n 取出 n 個相異數字所形成的陣列,找到數列中沒被取的那個數字。
注:
你的演算法應為線性時間複雜度。你可以只使用常數空間將其實作嗎?
範例測資:
範例 1:
輸入: [3,0,1]
輸出:2
範例 2:
輸入:[9,6,4,2,3,5,7,0,1]
輸出:8
解題思維:
可以看到 0 ~ n 這個數列的總和應為
n × (n + 1) ÷ 2
因此,我們就直接掃過陣列一次,求出陣列的數字總和並且看裡面有沒有 0 這一項的存在。
如果沒有 0 ,則代表缺失的數字就是 0 ;反之,如果陣列總和 = n × (n - 1) ÷ 2 ,則代表遺失的是 n 這個數字;如果不是前面兩者,則代表缺少的是中間的數字,即 n × (n + 1) ÷ 2 減去陣列總和。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。