標題想了很久,本來要寫刷題和演算法圖鑑的心得筆記,但寫在同一篇文章好像又太過雜亂了,所以姑且先分段寫。

這個禮拜除了修改履歷和請教已在前後端打滾幾年的朋友外,也終於開始刷題了。

雖然只寫了六題,但總比原地踏步好?

題目簡易心得

  1. Two Sum

    給一整數,並要求回傳包含一陣列中相加為目標整數 index 的陣列

    1. 一開始想用 arraymethod 來解,雖然比較語意化但效能不好
    2. 大多數的解題方式是建構一個新的 Map 物件來檢查陣列內容
  2. Longest Common Prefix

    給一含有數個字串的陣列,要求回傳相同前綴的字串

    1. Map 物件可以照順序儲存 key-value ,需要進一步釐清它跟 Object 的使用時機
    2. sort 會依照字元的 Unicode 編碼位置進行排序
    3. substringsubstr 可以提取字符,且後者並不被推薦使用; 類似的方法有replaceslice
  3. Search Insert Position

    給一含有數個整數的陣列,要求將給定的整數加入此陣列,使其為遞增排序,再回傳插入的 index。題目要求的時間複雜度為 O(log n)

    推薦使用二分順序法

  4. Integer to Roman

    這題的難度是 Medium,只是當初被 AC 當作挑戰題所以解過 只是以前用陣列而不是物件或 Map 來儲存資料,所以可以學習當時消化不了的觀念

    1. Object.entries() 回傳可被迭代的 key-value 物件,可以藉此將 Object 轉換為 Map。 類似 for ... in ,只是後者會還會列舉屬性。
    2. Array.reduce() 傳入函式,並將陣列化為單一值。剛好此題要求最終回傳數值,所以特別適合此方法。
    3. String.repeat() 回傳指定數量的新字串;可參考 String.concat()
  5. Valid Parentheses

    字串內只能有大中小括號,且必須成對,最後回傳布林值

    成對代表首尾相應,以上述例子而言:

    1. 檢查字串長度是否為偶數
    2. 如果第一個字符可以對應到最後一個字符,即成立
    3. 以上方法不考慮是否有括號之外的字串

    此題重點應該是複習 Array.pop()Array.push() 也是可以用 Array.unshift()Array.shift() ,只是會增加時間複雜度

  6. Implement strStr()

    回傳符合 needle 字串的第一個字符的 index,若無則回傳 -1 ,空字串則回傳 0

    算是複習 Array.substring的用法