果果🐔

果果的官网

golang单向链表删除元素

单向链表删除元素

golang单向链表删除元素 时间复杂度O(1) 思路:删除的接点可以变成上一个节点,而不是真正的删除之后再拼接 package main import ( "errors" "fmt" ) type NodeList struct { Val int Next *NodeList } func (head *NodeList) delete(cur *NodeList...

golang获取链表倒数第k个元素

获取链表倒数第k个元素

golang获取链表倒数第k个元素 package main import ( "errors" "fmt" ) type NodeList struct { Val int Next *NodeList } func initNodeList(k int) *NodeList { head := &NodeList{ Val: 1, } for i :...

golang切片奇偶元素位置互换

切片奇偶元素位置互换

golang切片奇偶元素位置互换 package main import "fmt" func moveSlice(s []int) []int { if len(s) <= 1 { return s } for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { if i&1 == 1 { i+...

golang顺序切片查重

切片查重

golang顺序切片查重 package main import "fmt" func unicorn(s []int) int { if len(s) == 1 { return s[0] } if len(s) == 2 { if s[0] == s[1] { return 0 } return s[0] } for i, j := 0, 1; ...

golang切片append

golang切片append

golang切片append 每次 slice 进行扩容的时候,要经历以下几个步骤: 为最终的容量申请到足够的内存空间; 从原有内存地址中将元素 copy 到新的内存中; 销毁原有内存地址中的元素; package main import "fmt" func main() { a := []int{1} a = append(a, 2) a = append...

golang切片反转

切片反转

golang切片反转 package main import "fmt" func reverse(s []int) []int { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] = s[j], s[i] } return s } func main() { s1 := []int{1, 2...

切片交集,并集和差集

交集,并集和差集算法

golang得到切片的交集,并集和差集 package main import "fmt" func intersect(s1, s2 []int) []int { var ret []int m := make(map[int]int) for _, v := range s1 { m[v]++ } for _, v := range s2 { vv := m[v...

golang实现反转链表

反转链表

golang实现反转链表 位置调换次数 pre cur whole 0 nil 1->2->3->4->5 1->2->3->4->5 1 1->n...

Raft协议详解

Raft协议

Raft 是一种更为简单方便易于理解的分布式算法,主要解决了分布式中的一致性问题。相比传统的 Paxos 算法,Raft 将大量的计算问题分解成为了一些简单的相对独立的子问题,并有着和 Multi-Paxos 同样的性能,下面我们通过动图,以后还原 Raft 内部原理。raft算法演示 Raft 基础 Raft协议一共包含如下3类角色: Leader(领袖):领袖由群众投票选举得...

Docker-compose.yml文件参数详解

docker compose

Docker-compose.yml文件参数详解 Compose和Docker兼容性 常用参数 文件格式示例 Compose和Docker兼容性 ​ Compose 文件格式有3个版本,分别为1, 2.x 和 3.x ​ 目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本 常用参数 version # 指定...