改變永遠不嫌晚,那現在的我改變了嗎?

一年又三個月前的今天,我發佈了這篇文章 改變永遠不嫌晚,就從現在開始吧 ,這篇文章中表達當時的我想要改變的決心,自省並誠實的面對自己的不足,下定決心想要成為強者(拿到成為強者的門票),在那之後,我也一直在思考自己想要的未來是什麼,我比較資淺,希望能夠到可以快速成長的工作環境,讓我可以跟著強者學習,想做的工作內容想朝軟體工程師或是系統軟體工程師方向努力,雖然這兩者準備起來方向並不完全一樣,但我還在職涯的開頭,對於未來有多個選擇並不是壞事。

閱讀全文〈改變永遠不嫌晚,那現在的我改變了嗎?〉

Backtracking 回溯法 – 陪你刷題

Leetcode 邁向千題的關卡,想要把所有題目刷過一遍,對於一位上班族來說就跟寫出來的程式沒有 bug 一樣困難,因此想要將刷題常用的觀念技巧與其對應題目整理出來,一方面可以整理自己思緒,也可以做為未來複習用。
這系列文章會一直持續下去,算是作為工程師職涯的隨身裝備。

何謂回溯法

回溯法的處理方式就像窮舉法,將所有可能的路徑都窮舉出來,接著開始每條岔路都派人走下去,換個角度來看,其實這個過程就如同在決策樹或是多子樹上遍歷 (Tree Traversal) 。

但如果把每條路都確實走過,這樣的作法的時間複雜度相當高,所以回溯法有時可以使用剪枝 (pruning) 的技巧提高效率,不用將所有解法都窮舉出來。

回溯法大部份用來解決廣義的搜索問題,從許多可能的解中找出滿足要求的所有解,回溯法可以應用於以下類型

閱讀全文〈Backtracking 回溯法 – 陪你刷題〉

Sliding Window – 陪你刷題

Leetcode 邁向千題的關卡,想要把所有題目刷過一遍,對於一位上班族來說就跟寫出來的程式沒有 bug 一樣困難,因此想要將刷題常用的觀念技巧與其對應題目整理出來,一方面可以整理自己思緒,也可以做為未來複習用。
這系列文章會一直持續下去,算是作為工程師職涯的隨身裝備。

何謂 sliding window

給定的 input 是線性資料結構,代表你可以循序存取 (sequential access),例如 array, linked list 或 string ,題目要求找出滿足特定條件的最長/最短 substring, subarray 或一個目標值,就可以使用 sliding window 技巧,此技巧有以下特質:

  1. 在線性時間內完成
  2. 透過操控 two pointer 找出滿足條件的區間
  3. 不管是搜索的範圍,或是最終答案,一定都是 continuous 的資料,continuous 代表資料可以 sequential access

直接先來看 leetcode 對應題目,再來探究 Sliding Window 的操作框架會比較有感覺。

閱讀全文〈Sliding Window – 陪你刷題〉