📜  从数组中删除重复元素的 Golang 程序(1)

📅  最后修改于: 2023-12-03 14:49:25.198000             🧑  作者: Mango

从数组中删除重复元素的 Golang 程序

简介

本文介绍如何使用 Golang 编写一个程序,用于从数组中删除重复的元素。我们将探讨两种常用的解决方法,并提供相应的 Golang 代码示例。

方法一:使用额外的存储空间

这种方法使用一个额外的 map 数据结构来记录数组中已经出现过的元素。遍历原始数组,并将每个元素作为 map 的键来检查它是否已经存在于 map 中。如果元素已经存在于 map 中,则表示它是重复的,我们可以跳过该元素。反之,如果元素不存在于 map 中,则将其加入新的结果数组。

以下是这种方法的 Golang 代码示例:

func removeDuplicates(arr []int) []int {
    visited := make(map[int]bool)
    result := []int{}

    for _, num := range arr {
        if !visited[num] {
            visited[num] = true
            result = append(result, num)
        }
    }

    return result
}
方法二:原地删除重复元素

这种方法操作原始数组,无需额外的存储空间。我们使用两个指针来追踪数组:一个指针用于遍历读取元素,另一个指针用于指向写入位置。当遇到重复元素时,我们只需要将读取指针继续移动,而写入指针不变。当遇到新的、非重复元素时,将其写入到当前写入指针所指向的位置,并同时移动两个指针。

以下是这种方法的 Golang 代码示例:

func removeDuplicates(arr []int) []int {
    if len(arr) <= 1 {
        return arr
    }

    writePos := 1

    for readPos := 1; readPos < len(arr); readPos++ {
        if arr[readPos] != arr[readPos-1] {
            arr[writePos] = arr[readPos]
            writePos++
        }
    }

    return arr[:writePos]
}
使用示例
func main() {
    arr := []int{1, 2, 2, 3, 4, 4, 5}
    uniqueArr := removeDuplicates(arr)
    
    fmt.Println(uniqueArr)
}

输出结果:

[1 2 3 4 5]
结论

通过以上两种方法,我们可以从一个数组中删除重复的元素。第一种方法使用额外的存储空间,适用于对原始数组没有修改要求的情况。第二种方法在原地修改数组,避免了额外的空间开销。根据实际需求和性能要求,我们可以选择其中一种方法来解决问题。