文章目的
想要利用系列的文章,來記錄一下自己刷 LeetCode 的解題筆記,方便日後複習。
前言
筆者在前端領域還是個小菜雞XD,目前刷題方向為 LeetCode 免費試題中難度為 Easy 的題目,刷題語言部分則是 JavaScript。
Single Number
目的
此題主要目的是丟入一個整數陣列,其中數字都會成對,僅有一個數字非成對,要找出非成對數字為何?
思考方向
筆者的想法是透過 forEach
與 filter
來幫我達到目的,來看一下程式碼:
1 | const singleNumber = function(nums) { |
透過 forEach
查看每個數字,查看的同時利用 filter
將陣列中有相同數字的 item 組成一個新陣列,若陣列長度為一代表陣列中的數字即為唯一的數字。
更好方法
因為上面的方法透過 target
這個變數去儲存新的 array,對於記憶體佔用來說不是非常好,所以可以這樣改寫來加強對記憶體效能的改善:
1 | const singleNumber = function(nums) { |
這個方法從頭找第一個 index 跟從尾找第一個 index,如果一樣就代表該數字僅存在一個。
Running Sum of 1d Array
目的
此題目的要傳入一個數字陣列到函數中,函數能回傳陣列中的逐漸加總,像是丟入 [1, 2, 3]
就要回傳 [1, 3, 6]
,原因為 [1, 1+2, 1+2+3]。
思考方向
筆者想法是透過 reduce
將每次加總結果丟入新的陣列,最後回傳該陣列,程式碼如下:
1 | const runningSum = function(nums) { |
更好方法
但上面的方法,其實並沒有很好,因為這寫法會讓 arr
變得毫無意義。
會造成這原因是我對於 reduce
的用法不夠熟悉,後來發現了一個更棒的解法:
1 | const runningSum = nums => { |
reduce
共有四個參數可以做操作,但我只注意到前兩個,恕不知這題可以活用後面的參數來解,i
與 arr
分別代表目前值的索引與我們使用 reduce
的陣列。
透過 arr[i] += a
就可以定義當下陣列的索引值等於索引值加上前一個值。
Richest Customer Wealth
目的
這題有點像是情境題,題目要我們把複數個帳號(複數個 array)用一個大 array 包住後丟入函數中,並回傳帳號加總的最大值以找出最有錢的人。
思考方向
筆者當下的想法是先透過迴圈將每個 array 裡面的值加總後產生一個擁有每個帳號加總的新 array,再將新 array 透過 sort
降冪排序,最後回傳排序完的第一個值:
1 | const maximumWealth = function(accounts) { |
更好方法
Math.max
可以幫助我們找到 array 中的最大值,改寫的方法如下:
1 | const maximumWealth = function(accounts) { |
這個方法省略了上方的 sort
也可以達到效果。