使用雙指標方法查詢兩個已排序陣列交集的 Go 語言程式


在這篇 Go 語言文章中,我們將編寫程式,使用雙指標方法查詢兩個陣列的交集。交集表示相似性或最常見的部分,兩個陣列的交集指的是兩個陣列之間相同的元素。

語法

func make ([] type, size, capacity)

Go 語言中的 make 函式用於建立陣列/對映,它接受要建立的變數型別、大小和容量作為引數。

func append(slice, element_1, element_2…, element_N) []T

append 函式用於向陣列切片新增值。它接受多個引數。第一個引數是要新增值的陣列,後面跟著要新增的值。然後,該函式返回包含所有值的最終陣列切片。

func range(variable)

range 函式用於迭代任何資料型別。要使用它,我們首先必須編寫 range 關鍵字,後面跟著要迭代的資料型別,結果迴圈將迭代到變數的最後一個元素。

sort.Ints()

此函式屬於 sort 包,用於對包含整數值的切片/陣列進行排序。

在 if-else 條件語句中使用雙指標方法

在這種方法中,我們將編寫一個 Go 語言程式,使用 if 條件語句查詢兩個陣列的交集,該條件語句用於比較陣列元素並將交集點新增到切片中以列印輸出。

演算法

  • 步驟 1 - 在程式中匯入 fmt、main 和 sort 包,其中 fmt 幫助格式化輸入和輸出,main 確保程式應為可執行程式,sort 用於對陣列進行排序。

  • 步驟 2 - 建立一個名為 intersect 的函式,該函式有兩個輸入引數 array1 和 array2。

  • 步驟 3 - 使用 sort 包中的 Ints 方法對兩個陣列進行排序。

  • 步驟 4 - 然後,將變數 i 和 j 初始化為 0,這些變數指的是陣列的索引。

  • 步驟 5 - 在此步驟中,建立一個空的交集切片來儲存兩個陣列的交集點。

  • 步驟 6 - 遍歷 array1 和 array2,並檢查元素是否相同,將元素追加到交集切片中,並增加 i 和 j 變數。

  • 步驟 7 - 如果第一個陣列元素小於第二個陣列元素,則增加 I 變數,否則增加 j 變數。

  • 步驟 8 - 最後,將切片返回到建立的外部函式,在 main 函式中,將接收輸出並使用 fmt 包中的 Println 函式列印到控制檯,其中 ln 表示換行。

示例

以下 Go 語言程式說明了如何在 if-else 條件語句中使用雙指標方法查詢兩個陣列的交集。

package main

import (
   "fmt"
   "sort"
)

func intersect(array1 []int, array2 []int) []int {
	
   sort.Ints(array1)
   sort.Ints(array2)
	
   i := 0 
   j := 0 

   var intersection []int
	
   for i < len(array1) && j < len(array2) {
      // If the elements are the same, add it to the intersection slice
      if array1[i] == array2[j] {
         intersection = append(intersection, array1[i])
         i++
         j++
      } else if array1[i] < array2[j] {
         i++
      } else {
         j++
      }
   }
   return intersection
}
func main() {
	
   array1 := []int{1, 2, 2, 3}
   array2 := []int{2, 2}

   intersection_points := intersect(array1, array2)

   fmt.Println("The intersection points of the two arrays are:")
   fmt.Println(intersection_points) 
}

輸出

The intersection points of the two arrays are:
[2 2]

在頻率對映中使用雙指標方法

在這種方法中,我們將編寫一個 Go 語言程式,使用頻率對映查詢兩個陣列的交集,該對映將用於計算每個元素出現的次數並將結果儲存在對映中。

演算法

  • 步驟 1 - 在程式中匯入 fmt 和 main 包,其中 fmt 幫助格式化輸入和輸出,main 確保程式應為可執行程式。

  • 步驟 2 - 建立一個名為 intersect 的函式,該函式有兩個輸入 array1 和 array2,並在該函式中使用 make 函式(Go 中的內建函式)建立一個頻率對映。

  • 步驟 3 - 迭代 array1 並計算陣列中元素出現的次數,並將結果儲存在對映中。

  • 步驟 4 - 在此步驟中,建立一個交集切片來儲存兩個陣列的交集點。

  • 步驟 5 - 接下來,迭代 array2 並檢查元素的頻率是否大於 0。

  • 步驟 6 - 如果條件滿足,則將值追加到交集切片中,並減少該值。

  • 步驟 7 - 將切片返回到外部函式,並在 main 函式中使用 fmt 包中的 Println 函式列印輸出,其中 ln 表示換行。

示例

以下 Go 語言程式說明了如何在頻率對映中使用雙指標方法查詢兩個陣列的交集。

package main

import "fmt"

func intersect(array1 []int, array2 []int) []int {
	 
   freq := make(map[int]int)
   for _, value := range array1 {
      freq[value]++    
   }
	
   var intersection []int
	
   for _, value := range array2 {
      if freq[value] > 0 {
         intersection = append(intersection, value)
         freq[value]--
      }
   }
   return intersection
}

func main() {
   array1 := []int{1, 2, 2, 3}
   array2 := []int{2, 2}
   intersection_point := intersect(array1, array2)
   fmt.Println("The intersection point of two arrays is:")
   fmt.Println(intersection_point) 
}

輸出

The intersection point of two arrays is:
[2 2]

結論

我們使用兩個示例編譯並執行了使用雙指標方法查詢兩個陣列交集的程式。在第一個示例中,我們使用了條件 if-else 語句,在第二個示例中,我們使用了頻率對映來獲取輸出。

更新於: 2023年4月3日

363 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.