Golang Go语言中切片去掉重复的部分,求高效思路
Golang Go语言中切片去掉重复的部分,求高效思路
例如 1 2 3, 2 3 4 => 1 4; 1 2 3 1, 2 3 4=> 1 4
想到的是利用 map 的 key 唯一性,map[type]struct{}
6 回复
如果只是 int 型,位运算即可
更多关于Golang Go语言中切片去掉重复的部分,求高效思路的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
楼主这文字描述能力略差啊,我重新诠释一下你看对不对:
现有两个数集,称作 a b,先将各自转化为集合,再求 a-b
没看出来跟切片有啥联系啊。。
直接用 map 吧 不要折腾了。 我就是用的 map
在Go语言中,去掉切片中的重复元素是一个常见需求,可以通过多种方式实现高效去重。以下是一个高效思路:
-
使用map进行去重: Go语言中的map是一种哈希表结构,查找、插入和删除操作的时间复杂度均为O(1)。因此,可以利用map的键唯一性来快速去重。
具体实现步骤:
- 创建一个map,键为切片中的元素类型,值为bool(或其他任意类型,只用作占位)。
- 遍历原切片,将每个元素作为键存入map中。
- 遍历map的键,构建一个新的切片,存储去重后的元素。
-
示例代码:
func removeDuplicates(slice []int) []int { seen := make(map[int]bool) result := []int{} for _, v := range slice { if !seen[v] { seen[v] = true result = append(result, v) } } return result }
-
性能考虑:
- 这种方法的空间复杂度为O(n),因为需要额外的map来存储元素。
- 时间复杂度为O(n),因为每个元素只会被遍历和插入一次。
通过这种方法,可以有效地去除切片中的重复元素,并且性能表现优异。对于大多数应用场景,这种方法都是推荐的选择。