使用雙指標法去除已排序陣列中重複元素的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.