Binary Search (1) – 陪你刷題

Binary search 是一種在有序陣列做搜尋的演算法,在最壞的狀況下,其時間複雜度為 O (log n) 對數時間,相當高效。

Binary search 框架

以下是 binary search 的框架,但只適用於有序且不含重複元素的 Array :

int bsearch(vector<int>& a, int value) {
    int low = 0;
    int high = a.size()-1;

    while (low <= high) {
        int mid = low + ((high-low)>>1);
        if (a[mid] == value) {
            return mid;
        } else if (a[mid] < value) {
            low = mid + 1;
        } else if (a[mid] > value) {
            high = mid - 1;
        }
    }
    return -1;
}

3個實作上容易犯的錯誤:

閱讀全文〈Binary Search (1) – 陪你刷題〉

加法的變形題 – 陪你刷題

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

在 leetcode 上有許多加法運算題目,差別在於 input 為各種資料結構,根據 leetcode 上的說法,這類型題目是 facebook 面試官愛考的題目,下面整理出四大類題目。

  • String 加法
  • Integer 加法
  • Array 加法
  • Linked list 加法

閱讀全文〈加法的變形題 – 陪你刷題〉

進不去的 if-else 條件運算式 – C 語言鬼故事

在工作上曾經遇到關於 if-else 的 bug ,明明 if 後的 expression 為 true ,但卻無法執行對應的程式碼。

進不去的程式碼

用以下程式為例, foo() 會根據 a 和 b 的值而有不同的回傳值。

閱讀全文〈進不去的 if-else 條件運算式 – C 語言鬼故事〉