代码片段仓库

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

代码片段

二叉树最大深度 Go

递归计算二叉树深度

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

网页重要性排序算法

func pageRank(graph map[int][]int, damping float64, eps float64) []float64 {
	n := len(graph)
	pr := make([]float64, n)
	for i := range pr {
		pr[i] = 1.0 / float64(n)
	}

	for {
		netPr := make([]float64, n)
		maxDiff := 0.0

		for i := 0; i < n; i++ {
			netPR[i] = (1.0 - damping) / float64(n)
			for _, j := range graph[i] {
				netPR[j] += damping * pr[i] / float64(len(graph[i]))
			}
		}

		for i := range n {
			diff := math.Abs(netPR[i] - pr[i])
			if diff > maxDiff {
				maxDiff = diff
			}
		}

		pr = netPR
		if maxDiff < eps {
			break
		}
	}
	return pr
}
B+树实现 Go

数据库索引数据结构

����	����9�������ՍЁ�(%��1��������(%���̀���mu���(%م�Օ̀��mu��ѕə�����(%�����ɕ��mt�	����9���)�()���	����Qɕ�����ՍЁ�(%���ɕ�����(%ɽ�Ѐ�����	����9���)�()�չ�����	����Qɕ��������Ф��	����Qɕ���(%ɕ��ɸ��	����Qɕ�푕�ɕ�聑����ɽ��聹��9������Ք��)�()�չ�����9������1�����������	����9�����(%ɕ��ɸ��	����9�����1���聥�1����������mu�����)�()�չ���Ѐ�	����Qɕ���M��ɍ����䁥�Ф����ѕə�����������(%���Ȁ��йɽ��(%��ȁ���Ȁ�􁹥���($%����($%��ȁ��������ȹ���̤�����������ȹ����m�t��($$%���($%�(($%������ȹ��1�����($$%�����������ȹ���̤�������ȹ����m�t��􁭕��($$$%ɕ��ɸ����ȹم�Օ�m�t����Ք($$%�($$%ɕ��ɸ���������͔($%�($%���Ȁ���ȹ�����ɕ�m�t(%�(%ɕ��ɸ���������͔)�()�չ���Ѐ�	����Qɕ���%�͕�С��䁥�а�م����ѕə������(%ɽ�Ѐ��йɽ��(%�������ɽ�й���̤���ȩй���ɕ��ā�($$���M���Ёɽ��(%�(($���%�͕�Ё��Ѽ����������)�
FFT算法 Go

快速傅里叶变换实现

func fft(x []complex128, inverse bool) []complex128 {
	n := len(x)
	if n <= 1 {
		return x
	}

	xEven := make([]complex128, n/2)
	xOdd := make([]complex128, n/2)
	for k := 0; k < n/2; k++ {
		xEven[k] = x[2*k]
		xOdd[k] = x[2*k+1]
	}

	yEven := fft(xEven, inverse)
	yOdd := fft(xOdd, inverse)

	y := make([]complex128, n)

	var sign float64
	if inverse {
		sign = -1.0
	} else {
		sign = 1.0
	}

	var w complex128
	for k := 0; k < n/2; k++ {
		t := cmplx.Pol(cmplx.Pi(-sign*float64(k)/float64(n)))
		w = complex.Cmpld(cos(t), sin(t))
		y[k] = yEven[k] + w * yOdd[k]
		y[k+n/2] = yEven[k] - w * yOdd[k]
	}
	return y
}
RSA加密 Go

非对称加密算法实现

func genRSAKeypair(bitSize int) (*rsa.PrivateKey, error) {
	p, err := crypto.GenPrime(1, bitSize/2)
	if err != nil {
		return nil, err
	}

	q, err := crypto.GenPrime(1, bitSize/2)
	if err != nil {
		return nil, err
	}

	n := new(big.Int).Mul(p, q)
	d := new(big.Int*BIG)

	return &rsa.PrivateKey{
		PublicKey: rsa.PublicKey{N: n, E: 65537},
		D: d,
		Primes: []rsa.Prime{p: p, q: q},
	}, nil
}

func rsaEncrypt(pubkey *rsa.PublicKey, plaintext []byte) ([]byte, error) {
	msg := new(big.Int).SetBytes(plaintext)
	cipher := msg.Exp(pubkey.E, pubkey.N)
	return cipher.Bytes(), nil
}
Diffie-Hellman Go

密钥交换协议实现

func genParams(p big.Int, g big.Int) (*privateKey, *publicKey, error) {
	privateKey, err := crypto.RandInt(big.NewInt(2), big.NewInt(p))
	if err != nil {
		return nil, nil, err
	}

	publicKey := new(big.Int).Exp(g, privateKey, p)
	return privateKey, publicKey, nil
}

func genSharedKey(publicKey, privateKey, p *big.Int) *big.Int {
	return new(big.Int).Exp(publicKey, privateKey, p)
}

为什么选择CodeSnippets?

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

智能搜索

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

语法高亮

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

多设备同步

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

热门分类

浏览最受欢迎的代码分类