原创 C++ 常用到的數據結構的使用 STL

1 string 頭文件 : #include <string> 使用 #include <iostream> #include <string> using namespace std; int main() { string a

原创 圖論 LeetCode面試題04.01 && 1334

面試題 04.01. 節點間通路 節點間通路。給定有向圖,設計一個算法,找出兩個節點之間是否存在一條路徑。 示例1: 輸入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start

原创 圖論之最短路徑 Dijkstra算法、超級源點、反向建邊

1.最短路徑問題 最短路徑問題:求一個結點到另一個結點的權值總和最小的路徑 對於無向圖和有向圖均是成立的 比如下圖,求從結點0到結點6的最短路徑 主要應用於:路徑規劃和工作任務規劃 2.鬆弛操作 鬆弛操作是最短路徑求解的核心 鬆弛操作:

原创 圖論之最小生成樹 Prim算法和Kruskal算法

1.最小生成樹問題 最小生成樹問題:一個圖有V個頂點,找到V-1條邊連接這V個頂點,使得總權值最小 最小生成樹問題通常是針對帶權無向圖、連通圖 如果圖不是連通圖:分別在每個連通分量上計算最小生成樹---最小生成森林 應用:電纜佈線設計、

原创 圖的廣度優先遍歷和最短路徑

1.廣度優先遍歷的過程 思想:先遍歷當前結點的全部鄰接結點,然後依次遍歷相鄰結點的全部相鄰結點 做法:使用隊列 將0結點加入到隊列中,將0從隊列取出 將0結點還未遍歷到的相鄰結點入隊 將1結點從隊列取出,將1結點還未遍歷到的相鄰結點入隊

原创 圖的深度優先遍歷和計算連通分量

1.深度優先遍歷過程 深度優先遍歷適用於有向圖和無向圖 複雜度:鄰接表:O(V+E) 鄰接矩陣:O(V^2) 過程: 訪問0: 訪問0的第一個相鄰結點1 訪問1:1的相鄰結點爲0,訪問過了,結點1的全部相鄰結點訪問完畢,退回0 接着訪問

原创 圖的基礎和表示

1.圖的基礎 圖是由節點和邊組成的 圖的主要應用:交通運輸、社交網絡、互聯網、工作安排、腦區活動、程序狀態執行 圖的分類:有向圖和無向圖;有權圖和無權圖;連通圖和非連通圖 圖的連通性:如果從圖的任意一個結點可以到另外任意一個結點,說

原创 並查集 LeetCode 547

LeetCode 547. 朋友圈 班上有 N 名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那麼我們可以認爲 A 也是 C 的朋友。所謂的朋友圈,是指所有朋友的集合。 給

原创 棧的使用 LeetCode 20&150

LeetCode 20. 有效的括號 給定一個只包括 '(',')','{','}','[',']'的字符串,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 注意空字符串可被認爲

原创 貪心 LeetCode 455&435

LeetCode 455. 分發餅乾 題目 假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多隻能給一塊餅乾。對每個孩子 i ,都有一個胃口值 gi ,這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j ,都有一

原创 動態規劃 LeetCode 70&120&64&279&300

LeetCode 70 爬樓梯 題目 假設你正在爬樓梯。需要 n階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個正整數。 輸入: 2 輸出: 2 解釋: 有兩種方法可以爬到

原创 動態規劃之發現重疊子問題 LeetCode 343 整數拆分

當遇到一個問題,想要使用動態規劃的基礎是發現重疊子問題 以LeetCode 343 整數拆分 這道題爲例 題目 給定一個正整數 n,將其拆分爲至少兩個正整數的和,並使這些整數的乘積最大化。 返回你可以獲得的最大乘積。 示例 1: 輸入:

原创 動態規劃 0-1揹包問題及優化

動態規劃解0-1揹包問題 過程: 依次計算數組中的每一個值:當容量C超過了當前物品的重量時,說明當前物品可以放入揹包中,那麼就要考慮是否將該物品放入揹包中,如果放入揹包中,當前揹包的總價值就爲memo[i-1][j-w[i]]+v

原创 動態規劃 狀態的定義和狀態轉移 Leetcode198&213

在解動態規劃題目的時候,我們要確定狀態的定義和狀態轉移 Leetcode198 打家劫舍 題目 你是一個專業的小偷,計劃偷竊沿街的房屋。 每間房內都藏有一定的現金,影響你偷竊的唯一制約因素 就是相鄰的房屋裝有相互連通的防盜系統, 如果兩間

原创 什麼情況下,使用記憶化搜索比動態規劃更加方便???

動態規劃是自底向上的,先處理子問題,然後再處理更大的問題。這樣就需要知道子問題和更大的問題之間的聯繫。我們能夠確定出子問題並且能夠正確的求解它,從而從子問題推出要解決的問題的解。 但是,如果當我們比較難確定出子問題是哪一個,比較困難的求出