編寫一個 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
廣告