解決問題的常用方法是使用迴圈逐步構建解決方案。 此方法有幾種變體:
以輸入為中心的策略:在這種方法中,我們一次處理乙個輸入,並在迴圈的每次迭代中構建部分解決方案。
以輸出為中心的策略:使用這種方法,我們一次向解決方案新增乙個輸出,並以迭代方式構建解決方案的各個部分。
迭代改進策略:這涉及從一些易於訪問的近似解決方案開始,然後不斷改進它們,直到達到最終解決方案。
還有幾種基於迴圈的方法:使用單個迴圈和變數,使用巢狀迴圈和變數,將迴圈增加乙個常量(大於 1),使用迴圈兩次(雙遍歷),使用單個迴圈和字首陣列(或額外記憶體)等。
羅馬數字到整數。
陣列中的領導者。
有效的山體形成。 菲茨巴茲問題。
插入、冒泡和選擇排序。
查詢陣列中的最大值和最小值。
對波形中的陣列進行排序。
陣列的平衡索引。
查詢您自己以外的產品。
將矩陣旋轉 90 度。
矩陣的螺旋遍歷。
查詢具有最大行數的行。
遞減策略涉及通過找到子問題的解決方案來解決問題。 這通常會導致遞迴演算法將問題分解為更小的輸入大小,並繼續這樣做,直到達到基本情況。
GCD 的歐幾里得演算法。
二叉搜尋演算法。
約瑟夫斯問題。
在二叉搜尋樹中搜尋。
插入二叉搜尋樹。
在二叉搜尋樹中刪除。
快速選擇演算法找到最小的第 k 個。
當陣列具有某種順序屬性(例如排序)時,可以使用二分法搜尋的思想來有效地解決搜尋問題。 通過這種方法,我們可以在 o(logn) 時間複雜度內找到乙個解決方案。
要使用二叉搜尋,我們需要根據問題的具體情況修改標準的二叉搜尋演算法。 核心思想是計算中間索引並遍歷陣列的左半部分或右半部分。
求整數的平方根。
在 rotation-sort 陣列中搜尋。
陣列中的固定點。
搜尋排序的 2D 矩陣。
排序陣列的中位數。
對陣列中元素的第乙個和最後乙個位置進行排序。
在增量或減法陣列中查詢最大值。
分而治之的策略包括將乙個問題分解為多個子問題,解決每個子問題,然後將它們的解決方案組合起來,以獲得原始問題的解決方案。 這種方法可以成為解決 DSA 中許多基本問題的有效方法。
通過將問題劃分為更小的部分,可以更輕鬆地單獨解決每個部分,然後將解決方案組合在一起,從而獲得整個問題的最終解決方案。
合併排序演算法。
快速排序演算法。
最大子陣列總和的分而治之的解決方案。
找到陣列中最大差異的分而治之的解決方案。
求陣列中最大值和最小值的分而治之。
分而治之,為陣列中的大多數元素找到解決方案。
分而治之以構建分段樹的想法。
優質作者名單