Merge Two Sorted Lists

題目
思路:

  1. 因為要做一個 linked list,可以用 while 在每次迴圈都接一個 node 出來

  2. 先設 while True:,等寫迴圈內容時再來確定 while 可繼續執行的條件

  3. 寫第一 part (如下) 後發現,while 條件需要 l1 and l2

    1
    2
    3
    4
    5
    6
    if l1.val > l2.val:
    curr.next = l2
    l2 = l2.next
    else:
    curr.next = l1
    l1 = l1.next

Remove Duplicates from Sorted List

題目
思路:

  1. 既然是 Linked List,我們可以宣告一個指標 curr 指向第一個 node,用 while 迴圈一次檢查一個 node (檢查完將指標移到下一個 node)

    • 不能直接用 head 來移動,因為到時候回傳答案的時候需要回傳這個 head
  2. 設定 while 可以繼續檢查的條件:有時要先寫 while 的內容,才會比較確定 while 條件應該怎麼寫,這時可以先寫 while True:,等內容寫完再來改條件

Add Two Numbers

題目
思路:

  1. 既然 Linked List 是由個位數開始,剛好可以用小學學的加法來從個位數開始相加。所以須設計一個迴圈來執行可重複執行的加法動作,一步步構建答案所需的 linked list,一次建立一個 node,直到完成。
  2. 迴圈要可重複執行,需要有個指標,在迴圈內對該指標所指的 node 做操作,並在迴圈結束時讓指標指到下一個 node,讓下一次迴圈來操作

Search Insert Position

題目
思路:最直覺是直接 iterate nums,不過題目指定要 O(log n),所以用 binary search 才能達到

  1. 設定左右兩個指標作為可能答案範圍:[left, right],目標是移動這兩個指標,縮小答案範圍,直到我們找到答案或答案範圍縮到只剩 1 個為止

  2. while left < right: binary search 什麼時候需要繼續下去?只要符合這個條件,就繼續 binary search

    • 因為目標是把答案範圍縮小到一個,此時兩個指標必須重合

3Sum

題目
思路:

  • 用三個指標,iterate 最左邊那個,找出對應於每個 left 指標的所有 result
  • 先把 nums 排序,如此移動 mid, right 指標時就有個依據

Python3 solution

為什麼 Python dict 的 get item operation 時間複雜度為 O(1) ?

如果去 google,大部分查到的都會說因為 Python 會把 key 經過 hash function 運算,得到一個 dict 真正內部在使用的 key,從而找到對應的 value。而一個好的 hash function 它的運算所需時間是不會隨著 n 增加而變大的,所以 dict 的 get item operation 時間複雜度為 O(1) 。

不過我的疑惑是,經過 hash function 運算得到 key 之後,由這個 key 去找到 value 的時間複雜度是 O(1) 嗎?除非這個也是 O(1) 才能說整個 get item operation 是 O(1) 。

在 Mac 加入 ssh key 的步驟

  1. ssh-keygen -t ed25519 -C "{你的 email}"

    • 預設路徑假如已有相同檔案,記得指定新的完整路徑
    • 如檔名不用預設的,下面 id_ed25519 自行替換成自己的檔名
  2. vi ~/.ssh/config

    • 舉例:加上如下

      1
      2
      3
      4
      Host GitHub
      HostName github.com
      IdentityFile ~/.ssh/id_ed25519
      IdentitiesOnly yes
  3. ssh-add -K ~/.ssh/id_ed25519

    • register your private key with ssh-agent
  4. pbcopy < ~/.ssh/id_ed25519.pub

  5. 貼到所使用的服務網站的相對應設定頁面

簡單統整 JWT 相對於傳統 Session 驗證的好處

  • Server 不用存 Session
  • 只有在 Client 拿新 JWT 時才需要跟 DB 溝通
    • Clent 拿的時機:JWT 到期或第一次拿
    • 為何不需跟 DB 溝通?
      • 因為 JWT 裡已有所需資訊
      • 但假如業務需求需要另外取敏感資訊的話還是需要碰 DB
  • 參考

PostgreSQL/MySQL local docker 開發的初始 setup

container run 起來之後:
PostgreSQL:

  1. docker exec -it {db-container-name} psql -U postgres
    • 以預設 user postgres 連進 DB
  2. create user {username} with password '{password}';
  3. create database {database_name} with owner {username};

用 pipenv 管理 requirements 搭配 docker-compose local 開發

  • Local 開發是跑在 Docker 的虛擬環境裡,所以 Pipenv 產生的虛擬環境只是用來裝套件產生 Pipfile.lock 而已
  • 用 pipenv 就不用自己寫 requirements.txt,不但可以自動安裝最新版的套件,而且可以很輕鬆的固定住對應 sub-packages 的版本
  • 想一次更新所有套件也很容易
  • 步驟:(以裝一個 package 為例)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×