基础
并查集理论基础
刷题
- 寻找存在的路线
需要注意每一次添加两个元素s,t到一个合并集,在判断他们不是一个合并集后,需要将s的根结点指向t的根结点
需要注意并查集只能解决无向图
总结
golang 中不能使用map等类型直接作为方法的接收器(reciever),可以将map放入结构体,或者为map设置别名
对于方法接收器中,指针和值的区别
| 特性 | 值接收器 | 指针接收器 |
|---|---|---|
| 操作对象 | 原始值的副本 | 指向原始值的指针 |
| 修改效果 | 修改不会影响原始值 | 修改会影响原始值 |
| 性能 | 大对象有拷贝开销 | 避免拷贝,更高效 |
| nil 检查 | 不支持 nil 接收器 | 支持 nil 接收器,可检查 nil |
| 接口实现 | 仅值类型实现接口 | 值和指针类型都实现接口 |
- Go 官方文档 - 方法: go.dev/doc/effecti…
- Go 语言规范 - 方法声明: go.dev/ref/spec#Me…
- Go 官方教程 - 指针接收器: go.dev/tour/method…
对于什么时候需要指针,值接收器,是否应该混用
- 大型结构体:指针接收器避免了值的复制,性能更好。
- 小型类型:值接收器的性能差异可忽略不计,有时甚至更快。
要保持 一致性原则
- 如果类型的某些方法需要指针接收器(如需要修改接收器变量本身),为了保持API的一致性,其他方法也建议使用指针接收器。
- 避免混合使用两种接收器类型,否则会导致接口实现和方法调用的混乱。