Day55 - 图论 Part05

20 阅读1分钟

基础

并查集理论基础

刷题

  1. 寻找存在的路线

kamacoder.com/problempage…

image.png

需要注意每一次添加两个元素s,t到一个合并集,在判断他们不是一个合并集后,需要将s的根结点指向t的根结点

需要注意并查集只能解决无向图

总结

golang 中不能使用map等类型直接作为方法的接收器(reciever),可以将map放入结构体,或者为map设置别名

对于方法接收器中,指针和值的区别

特性值接收器指针接收器
操作对象原始值的副本指向原始值的指针
修改效果修改不会影响原始值修改会影响原始值
性能大对象有拷贝开销避免拷贝,更高效
nil 检查不支持 nil 接收器支持 nil 接收器,可检查 nil
接口实现仅值类型实现接口值和指针类型都实现接口
  1. Go 官方文档 - 方法: go.dev/doc/effecti…
  2. Go 语言规范 - 方法声明: go.dev/ref/spec#Me…
  3. Go 官方教程 - 指针接收器: go.dev/tour/method…

对于什么时候需要指针,值接收器,是否应该混用

  • 大型结构体:指针接收器避免了值的复制,性能更好。
  • 小型类型:值接收器的性能差异可忽略不计,有时甚至更快。

要保持 一致性原则

  • 如果类型的某些方法需要指针接收器(如需要修改接收器变量本身),为了保持API的一致性,其他方法也建议使用指针接收器。
  • 避免混合使用两种接收器类型,否则会导致接口实现和方法调用的混乱。