編寫一個 Go 語言程式,查詢給定範圍內的重複元素


我們可以用兩種不同的方法解決這個問題。讓我們檢查第一種方法。

方法一:

示例

輸入陣列 = [1, 2, 3, 4, 4] => 範圍是 1 到 5,但 4 在此範圍內是重複元素。

解決這個問題的方法

  • 步驟 1:定義一個接受陣列的方法。
  • 步驟 2:宣告一個已訪問對映。
  • 步驟 3:迭代給定的陣列。如果該元素存在於已訪問對映中,則返回該元素。
  • 步驟 4:否則,返回 -1。

程式

線上演示

package main
import "fmt"

func duplicateInArray(arr []int) int{
   visited := make(map[int]bool, 0)
   for i:=0; i<len(arr); i++{
      if visited[arr[i]] == true{
         return arr[i]
      } else {
         visited[arr[i]] = true
      }
   }
   return -1
}

func main(){
   fmt.Println(duplicateInArray([]int{1, 2, 3, 4, 4}))
   fmt.Println(duplicateInArray([]int{4, 5, 6, 7, 7}))
   fmt.Println(duplicateInArray([]int{1, 2, 3, 4, 5}))
}

輸出

4
7
-1

現在,讓我們檢查解決此問題的第二種方法。

方法二:使用 XOR 運算

示例

輸入陣列 = [1, 2, 3, 4, 4] => 範圍是 1 到 5,但 4 在此範圍內是重複的。

範圍是 1 到 5。=> XOR => 0^1^2^3^4^4^0^1^2^3^4 => 4 (因為 0^1=1)。

解決這個問題的方法

  • 步驟 1:定義一個接受陣列的方法。
  • 步驟 2:從給定陣列中找到範圍值,並定義一個變數 **xor**,初始化為 0。
  • 步驟 3:迭代給定陣列並對陣列的元素執行 **xor** 運算。
  • 步驟 4:還對從較低範圍值到較高範圍值的範圍執行 **xor** 運算。
  • 步驟 5:最後,返回 **xor** 變數,非零值表示重複元素。

程式

線上演示

package main
import "fmt"

func duplicateInArray(arr []int, r int) int{
   xor := 0
   for i:=0; i<len(arr); i++{
      xor ^= arr[i]
   }
   for j:=1; j<=r-1; j++{
      xor ^= j
   }
   return xor
}

輸出

4
3
1
0

更新於:2021年2月4日

555 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告