使用双指针法去除已排序数组中重复元素的Go语言程序


在这篇Go语言文章中,我们将使用迭代法和优化迭代法,通过双指针法去除已排序数组中的重复元素。数组是由相同数据类型元素组成的集合,它们排列在连续的内存块中,并使用索引或下标进行访问。

已排序数组是指元素按特定顺序(例如升序或降序)排列的数组。

使用双指针法及迭代法

在此方法中,我们将定义一个使用迭代法的duplicatesRemove()函数,该函数用于使用双指针法去除已排序数组中的重复元素。

算法

  • 步骤1 − 首先,我们需要导入fmt包。

  • 步骤2 − 开始main()函数。在main()函数内部,初始化已排序数组。

  • 步骤3 − 现在,调用duplicatesRemove()函数并将数组传递给它。

  • 步骤4 − 接下来,使用fmt.Println()函数打印去除重复元素后更新后的数组。

  • 步骤5 − 现在,创建一个duplicatesRemove()函数,该函数接收一个整数数组。此函数将在去除初始数组中的重复元素后返回一个整数数组。

  • 步骤6 − 此函数首先检查数组的长度是否小于2。如果是,则返回初始数组,因为它无法从长度小于2的数组中删除重复元素。

  • 步骤7 − 现在,将两个指针i和j分别初始化为0和1。比较i和j位置以及元素。

  • 步骤8 − 最后,它返回初始数组的切片,该切片仅包含直到i+1位置的唯一元素。

示例

以下是使用双指针法和迭代法去除已排序数组中重复元素的Go语言程序

package main

import "fmt"

func main() {
   arr := []int{10, 20, 20, 20, 30, 30, 30, 40, 40}
   fmt.Println("Initial array:", arr)
   arr = duplicatesRemove(arr)
   fmt.Println("Updated array after removing duplicates:", arr)
}

func duplicatesRemove(arr []int) []int {
   n := len(arr)
   if n < 2 {
      return arr
   }
   i, j := 0, 1
   for j < n {
      if arr[i] == arr[j] {
         j++
      } else {
         i++
         arr[i] = arr[j]
         j++
      }
   }
   return arr[:i+1]
}

输出

Initial array: [10 20 20 20 30 30 30 40 40]
Updated array after removing duplicates: [10 20 30 40]

使用双指针法及优化迭代法

在此方法中,我们将以优化的方式定义一个使用迭代法的duplicatesRemove()函数,该函数用于使用双指针法去除已排序数组中的重复元素。

算法

  • 步骤1 − 首先,我们需要导入fmt包。

  • 步骤2 − 开始main()函数。在main()函数内部,初始化已排序数组。

  • 步骤3 − 现在,调用duplicatesRemove()函数并将数组传递给它。

  • 步骤4 − 接下来,使用fmt.Println()函数打印去除重复元素后更新后的数组。

  • 步骤5 − 现在,创建一个duplicatesRemove()函数,该函数接收一个整数数组。此函数将在去除初始数组中的重复元素后返回一个整数数组。

  • 步骤7 − 现在,将两个指针i和j分别初始化为0和1。比较i和j位置以及元素。如果它们不相等,则递增i并将j位置的元素复制到i位置。然后,递增j以移动到下一个元素。

  • 步骤8 − 继续此操作,直到j到达数组的末尾。

  • 步骤9 − 最后,它返回初始数组的切片,该切片仅包含直到i+1位置的唯一元素。

示例

以下是使用双指针法和优化迭代法去除已排序数组中重复元素的Go语言程序

package main

import "fmt"

func main() {
   arr := []int{10, 10, 20, 30, 30, 30, 40, 50, 50}
   fmt.Println("Initial array:", arr)
   uniqueArr := duplicatesRemove(arr)
   fmt.Println("Updated array after removing duplicates:", uniqueArr)
}

func duplicatesRemove(arr []int) []int {
   i := 0
   for j := 1; j < len(arr); j++ {
      if arr[j] != arr[i] {
         i++
         arr[i] = arr[j]
      }
   }
   return arr[:i+1]
}

输出

Initial array: [10 10 20 30 30 30 40 50 50]
Updated array after removing duplicates: [10 20 30 40 50]

结论

我们已经成功编译并执行了一个Go语言程序,该程序使用双指针法以及迭代法和优化迭代法来去除已排序数组中的重复元素,并附带两个示例。在第一个示例中,我们使用了迭代法;在第二个示例中,我们使用了优化迭代法。它们使用for循环迭代数组,将每个元素与前一个元素进行比较,如果重复则将其删除。

更新于:2023年4月3日

650 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.