golang leetcode349两个数组的交集 map 双指针+排序
2024-01-07 19:29:29
两个数组的交集 leetcode349
使用map
由于golang中没有set,这里算是模拟的一种方式
当然这里也可以用数组来代替map
// 最简易的方式
func intersection(nums1 []int, nums2 []int) []int {
table := make(map[int]int)
result := []int{}
for _, i2 := range nums1 {
table[i2] = 1
}
for _, i2 := range nums2 {
if table[i2] == 1 {
table[i2] = 0
result = append(result, i2)
}
}
return result
}
排序+双指针
对数组进行排序后,就可以通过双指针的方式从小到大开始比较两个数组
以下两种方法都是采取的这个思路,只是循环的方式不同,复杂度相同
// 排序+双指针
func intersection(nums1 []int, nums2 []int) []int {
index1, index2 := 0, 0
sort.Ints(nums1)
sort.Ints(nums2)
L1 := len(nums1)
L2 := len(nums2)
result := []int{}
for index1 < L1 {
//当出现不是等于的情况时直接for循环
for nums1[index1] < nums2[index2] {
index1++
if index1 >= L1 {
return result
}
}
for nums1[index1] > nums2[index2] {
index2++
if index2 >= L2 {
return result
}
}
if nums1[index1] == nums2[index2] {
result = append(result, nums1[index1])
for nums1[index1] == nums2[index2] {
index2++
if index2 >= L2 {
return result
}
}
}
}
return result
}
func intersection(nums1 []int, nums2 []int) (res []int) {
sort.Ints(nums1)
sort.Ints(nums2)
for i, j := 0, 0; i < len(nums1) && j < len(nums2); {
x, y := nums1[i], nums2[j]
if x == y {
if res == nil || x > res[len(res)-1] {
res = append(res, x)
}
i++
j++
} else if x < y {
i++
} else {
j++
}
}
return
}
文章来源:https://blog.csdn.net/kingsill/article/details/135443200
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!