编写一个 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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告