Merge Sort

歸併排序 (Merge Sort) 算是比較優秀的排序算法,因為時間複雜度是 O(N log N);而選擇排序、冒泡排序、和插入排序時間複雜度則是O(N^2)。 Merge Sort 的基本思想是分治法 (Divide and conquer),是將原問題分解為規模較小的子問題,然後逐一解決這些子問題之後,合併這些子問題的答案,並建立原問題的答案。

Continue reading

509. Fibonacci Numbers

這題是非常有名的 Fibonacci 數列,其特徵是除了前兩個數字之外,每個數字等於前兩個數字之和。解法可以帶出一些經典觀念和想法,例如 :

  • Dynamic Programming
  • 迭帶 for-loop
  • recursion 遞迴

由於 Fibonacci 數列的時間空間複雜度計算比較特別,加上可以很初步引入很多的思考方式,故雖然這題是 easy ,我還是做個紀錄。

Continue reading

Recursion

遞迴 (Recursion),通過調用自身函數,有時可以將某個複雜的問題,分解為規模較小的子問題。而 Recursion 也經常和以下演算法配合使用 :

  • 分治法 divide and conquer
  • 回溯法 backtrack
  • 動態規劃 dynamic programming

在實際狀況中,遞迴函數的設計常常很難想像,因為遞迴設計屬於逆向思維,在設計遞迴函數的時候,非常容易被這種層層嵌套搞暈,在這裡簡單給個模板範例講解。

Continue reading

反轉 Linked List 是一道經典的題目,可以用分別用 :

  • 指針 (iterative)
  • 遞迴 (recursive)

兩種截然不同的風格來解答。個人認為是蠻好的題目,可以多寫幾次,並從各種不同的解答方式來說明思考,故在此筆記。要說簡單也不算,對於 recursive 解法一開始我覺得有點難理解 ! 雖然被歸類在 Easy,但我私心覺得蠻容易打擊第一次做的人的…

Continue reading

Author's picture

李昀陽 YunYang Lee

Welcome to my Tech Note. You can read some of the chapters below.

Software Engineer

Taiwan