代码片段仓库

收集、管理和分享有用的代码片段,提高开发效率

代码片段

堆排序 Go

使用最大堆进行排序

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)
	}
}
堆排序 Go

使用最大堆进行排序

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)
	}
}
拓扑排序 Go

有向无环图的拓扑排序

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
}
拓扑排序 Go

有向无环图的拓扑排序

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
}
KMP字符串匹配 Go

高效字符串搜索算法

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
}
二叉树最大深度 Go

递归计算二叉树深度

����Qɕ�9�������ՍЁ�(%Y������(%1��Ѐ�Qɕ�9���(%I���Ѐ�Qɕ�9���)�()�չ�������Ѡ�ɽ�Ѐ�Qɕ�9�������Ё�(%���ɽ�Ѐ�􁹥���($%ɕ��ɸ��(%�(%������Ѡ��􁵅���Ѡ�ɽ�й1��Ф(%ɥ�����Ѡ��􁵅���Ѡ�ɽ�йI���Ф(%���������Ѡ���ɥ�����Ѡ��($%ɕ��ɸ�������Ѡ����(%�(%ɕ��ɸ�ɥ�����Ѡ����)

为什么选择CodeSnippets?

高效管理您的代码片段,提高开发效率

智能搜索

通过关键字、语言或分类快速查找代码片段,支持模糊搜索和过滤功能

语法高亮

支持多种编程语言的语法高亮,使代码更加清晰易读

多设备同步

随时随地访问您的代码片段库,支持桌面和移动设备

热门分类

浏览最受欢迎的代码分类