LeetCode Biweekly Contest 89

Biweekly Contest 89 2423. Remove Letter To Equalize Frequency You are given a 0-indexed string word, consisting of lowercase English letters. You need to select one index and remove the letter at that index from word so that the frequency of every letter present in word is equal. Return true if it is possible to remove one letter so that the frequency of all letters in word are equal, and false otherwise....

2022, October 3 · 2 min · 342 words · Me

Memorization

什麼情境 在網站開發過程中,除了是靜態網頁(例如現在觀看的部落格)之外,免不了會有依使用者瀏覽行為,而動態響應的資料。 常見的動態資料來源有 JS 動態產生 向內部資料庫查詢 向外部網站查詢 而當程式重複執行條件相同的查詢時,雖然會因資料庫設計,返回快取結果,但如果能在本地確認這筆查詢已經做過,並直接讀取,即可加速網站讀取的速度。 這種記錄執行結果並在之後可以重複讀取的手法便稱為 Memorization 。 如何使用 例如在頁面中利用方法 current_user 來向資料庫查詢並回傳一個 User 物件,並在頁面中多次呼叫 current_user 來產生 User 相關的資料,為了避免重複查詢資料庫,可以將以下程式碼 1 2 3 def current_user @_user = User.find_by(id: session[:user_session]) end 修改成 1 2 3 def current_user @_user ||= User.find_by(id: session[:user_session]) end 其中的 A ||= B 等價於 A = (A || B) 因為在 ||(or) 判斷中,由左至右,如果元素為真(Truthy),則返回該元素,之後的程式碼將略過不執行,以此來看上面執行的結果, current_user 的回傳值會是: 若 @_user 為真,回傳 @_user ,否則回傳 User.find_by(id: session[:user_session]) 對於網站來說,假設一個搜尋站內商品的輸入框,透過觀察使用者輸入文字變化後,至後臺撈取符合前綴的查詢結果,渲染至畫面上以表現 autocomplete 的效果。此時便能以 Memorization 手法記錄曾經查詢的結果,當使用者按下刪除鍵移除字元時,不須再次查詢資料庫而是從記憶體直接取出。 順帶一提 在處理遞迴程式碼時,如果觀察到拆解出的部分結果都相等,也可以運用此手法加速並降低呼叫堆疊數。以經典的遞迴題目-求費氏數列的值為例...

2022, August 6 · 1 min · 167 words · Me