收集、管理和分享有用的代码片段,提高开发效率
使用最大堆进行排序
func heapSort(arr []int) {
n := len(arr)
// Build heap (rearrange array)
for i := n/2-1; i >= 0; i-- {
heapify(arr, n, i)
}
// One by one extract element
for i := n-1; i > 0; i-- {
arr[0], arr[i] = arr[i], arr[0]
heapify(arr, i, 0)
}
}
func heapify(arr []int, n, i int) {
largest := i
l := 2*i + 1
r := 2*i + 2
if l < n && arr[l] > arr[largest] {
largest = l
}
if r < n && arr[r] > arr[largest] {
largest = r
}
if largest != i {
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
}
}
使用最大堆进行排序
func heapSort(arr []int) {
n := len(arr)
// Build heap (rearrange array)
for i := n/2-1; i >= 0; i-- {
heapify(arr, n, i)
}
// One by one extract element
for i := n-1; i > 0; i-- {
arr[0], arr[i] = arr[i], arr[0]
heapify(arr, i, 0)
}
}
func heapify(arr []int, n, i int) {
largest := i
l := 2*i + 1
r := 2*i + 2
if l < n && arr[l] > arr[largest] {
largest = l
}
if r < n && arr[r] > arr[largest] {
largest = r
}
if largest != i {
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
}
}
有向无环图的拓扑排序
func topoSort(graph map[int][]int) []int {
indegree := make([]int, len(graph))
for _, adj := range graph {
for _, n := range adj {
indegree[n]++
}
}
q := []int{}
for i, d := range indegree {
if d == 0 {
q = append(q, i)
}
}
result := []int{}
for len(q) > 0 {
n := q[0]
q = q[1:]
result = append(result, n)
for _, m := range graph[n] {
indegree[m]--
if indegree[m] == 0 {
q = append(q, m)
}
}
}
return result
}
有向无环图的拓扑排序
func topoSort(graph map[int][]int) []int {
indegree := make([]int, len(graph))
for _, adj := range graph {
for _, n := range adj {
indegree[n]++
}
}
q := []int{}
for i, d := range indegree {
if d == 0 {
q = append(q, i)
}
}
result := []int{}
for len(q) > 0 {
n := q[0]
q = q[1:]
result = append(result, n)
for _, m := range graph[n] {
indegree[m]--
if indegree[m] == 0 {
q = append(q, m)
}
}
}
return result
}
高效字符串搜索算法
func kmpsearch(text, pattern string) int {
n := len(pattern)
if n == 0 {
return 0
}
lps := make([]int, n)
len := 0
for i := 1; i < n; i++ {
for len > 0 && pattern[i] != pattern[len] {
len = lps[len-1]
}
if pattern[i] == pattern[len] {
len++
}
lps[i] = len
}
i, j := 0, 0
for i < len(text) {
for j > 0 && text[i] != pattern[j] {
j = lps[j-1]
}
if text[i] == pattern[j] {
j++
}
if j == n {
return i - n + 1
}
}
return -1
}
递归计算二叉树深度
����Qɕ�9�������ՍЁ�(%Y������(%1��Ѐ�Qɕ�9���(%I���Ѐ�Qɕ�9���)�()�չ�������Ѡ�ɽ�Ѐ�Qɕ�9�������Ё�(%���ɽ�Ѐ����($%ɕ��ɸ��(%�(%������Ѡ�����Ѡ�ɽ�й1��Ф(%ɥ�����Ѡ�����Ѡ�ɽ�йI���Ф(%���������Ѡ���ɥ�����Ѡ��($%ɕ��ɸ�������Ѡ����(%�(%ɕ��ɸ�ɥ�����Ѡ����)
高效管理您的代码片段,提高开发效率
通过关键字、语言或分类快速查找代码片段,支持模糊搜索和过滤功能
支持多种编程语言的语法高亮,使代码更加清晰易读
随时随地访问您的代码片段库,支持桌面和移动设备
浏览最受欢迎的代码分类