刷題筆記(1)

2021-10-21 20:38:28 字數 1788 閱讀 4909

較為典型的有求最短步數,最少次數,最短時間等等。

洛谷 p1135\2895…

void

bfs(para1,..

...)

if(滿足入隊條件)}}

}

常見的有回溯法,染色法,以及遍歷。

以回溯法為例。染色的時候就不用取消標記了。

常見的:求連通塊數量,求小島面積,求路徑數量等。

void

dfs(para1,..

...)

vis=

1//標記

for(對所有相鄰節點遍歷dfs)

vis=

0//撤銷標記

}

前序遍歷對應dfs。層次遍歷對應bfs。

已知前序和中序,求出後序遍歷。

(或已知中序和後序,求前序)

前序的第乙個節點是整棵樹的根節點。

根節點又把中序分為左子樹的中序,和右子樹的中序。

前序也可以分為左子樹的前序和右子樹的前序。

而後序的最後乙個節點也是整棵樹的根節點。

所以遞迴就可以解決。

void

backtopreorder

(string s1, string s2)

if(s1.

size()

==1)int l = s2.

size()

;int index = s1.

find

(s2[l -1]

);cout << s2[l -1]

; string ls1 = s1.

substr(0

, index)

; string rs1 = s1.

substr

(index +1)

; string ls2 = s2.

substr(0

, ls1.

size()

);string rs2 = s2.

substr

(ls1.

size()

,rs1.

size()

);backtopreorder

(ls1, ls2)

;backtopreorder

(rs1, rs2);}

void

backtopostorder

(string s1, string s2)

if(s1.

size()

==1)int index = s2.

find

(s1[0]

);string ls2 = s2.

substr(0

, index)

; string rs2 = s2.

substr

(index +1)

; string ls1 = s1.

substr(1

, ls2.

size()

);string rs1 = s1.

substr

(ls2.

size()

+1, rs2.

size()

);backtopostorder

(ls1, ls2)

;//求左子樹的後序遍歷

backtopostorder

(rs1, rs2)

;//求右子樹的後序遍歷

cout << s1[0]

;//根節點

}

LeeCode刷題筆記 1

1.twosum 從今天開始好好刷題吧 此題用雜湊表即可求解,依題意不必在雜湊表建好之後進行尋找,而是在建表的同時進行尋找 這裡使用了乙個庫 注意即使題目說明了一定會有解,但是函式中還是要在無解的情況下返回乙個值 我的測試 如下 include include includeusing namesp...

Codewars刷題筆記(1)

描述 取2個字串s1,s2僅包含從a到的字母z。返回乙個新的排序字串,最長的字串,包含不同的字母,每個僅取一次 來自s1或s2。例子 a xyaabbbccccdefww b xyyyyabklmopq longest a,b abcdefklmopqwxy a abcdefghijklmnopqr...

LeetCode刷題筆記1

for迴圈新用法,題目217 2.map和unordered map 有序和無序的區別,無序更快,題目 217 而c 標準庫的hashmap其實叫作std unordered map,其增加和查詢的時間複雜度才是 o 1 o 1 o 1 它提供了類似map的方法。在c 11下直接使用標頭檔案 inc...