使用双指针方法查找数组中是否存在两个数字之和等于给定目标和的 Golang 程序


在这篇 Golang 文章中,我们将使用迭代和优化迭代方法,通过双指针方法查找数组中是否存在两个数字之和等于给定目标和。数组是由相同数据类型元素组成的集合,这些元素排列在内存的连续块中,并使用索引或下标进行访问。

使用迭代方法的双指针方法

在这种方法中,我们将定义一个使用迭代方法的 pairWithGivenSum() 函数,用于使用双指针方法查找数组中是否存在两个数字之和等于给定目标和。

算法

  • 步骤 1 − 首先,我们需要导入 fmt 包。

  • 步骤 2 − 现在,创建一个 pairWithGivenSum() 函数,该函数接收一个整数数组和一个目标和值作为输入。此函数将查找数组中是否存在两个数字之和等于给定目标和。

  • 步骤 3 − 它使用两个指针 left 和 right 来跟踪数组的起始和结束索引。

  • 步骤 4 − 然后,它通过将这些指针处的元素之和与目标和进行比较来向内移动指针。

  • 步骤 5 − 如果和小于目标和,则左指针向右移动。如果和大于目标和,则右指针向左移动。

  • 步骤 6 − 如果存在两个元素之和等于目标和,则函数返回 true;如果不存在这样的对,则返回 false。

  • 步骤 7 − 启动 main() 函数。在 main() 函数内部,初始化一个数组并提供整数目标和值。

  • 步骤 8 − 现在,调用 pairWithGivenSum() 函数并将数组和和作为参数传递给它。

  • 步骤 9 − 此外,使用 fmt.Println() 函数打印使用双指针方法查找数组中是否存在两个数字之和等于给定目标和的结果。

示例

以下是使用迭代方法的双指针方法查找数组中是否存在两个数字之和等于给定目标和的 Go 语言程序

package main

import "fmt"

func pairWithGivenSum(arr []int, targetSum int) bool {
   left, right := 0, len(arr)-1

   for left < right {
      sum := arr[left] + arr[right]
      if sum == targetSum {
         return true
      } else if sum < targetSum {
         left++
      } else {
         right--
      }
   }
   return false
}

func main() {
   arr := []int{10, 40, 30, 80, 50}
   targetSum := 70

   if pairWithGivenSum(arr, targetSum) {
      fmt.Println("There exists a pair of numbers in the array that add up to sum", targetSum)
   } else {
      fmt.Println("There does not exist a pair of numbers in the array that add up to sum", targetSum)
   }
}

输出

There exists a pair of numbers in the array that add up to sum 70

使用优化迭代方法的双指针方法

在这种方法中,我们将以优化方式定义一个使用迭代方法的 pairWithGivenSum() 函数,用于使用双指针方法查找数组中是否存在两个数字之和等于给定目标和。

算法

  • 步骤 1 − 首先,我们需要导入 fmt 包。

  • 步骤 2 − 现在,创建一个 pairWithGivenSum() 函数,该函数接收一个整数数组和一个目标和值作为输入。此函数将查找数组中是否存在两个数字之和等于给定目标和,并返回布尔值。

  • 步骤 3 − 它在数组的开头和结尾初始化两个指针 left 和 right。

  • 步骤 4 − 然后,将 left 和 right 指针处的元素之和与目标和进行比较。如果和小于目标和,则它递增左指针。如果和大于目标和,则它递减右指针。

  • 步骤 5 − 函数继续指示不存在任何两个元素之和等于目标和,或者直到找到两个元素之和等于目标和并返回 true。

  • 步骤 6 − 启动 main() 函数。在 main() 函数内部,初始化一个数组并提供整数目标和值。

  • 步骤 7 − 现在,调用 pairWithGivenSum() 函数并将数组和和作为参数传递给它。

  • 步骤 8 − 此外,使用 fmt.Println() 函数打印使用双指针方法查找数组中是否存在两个数字之和等于给定目标和的结果。

示例

以下是使用优化迭代方法的双指针方法查找数组中是否存在两个数字之和等于给定目标和的 Go 语言程序

package main

import "fmt"

func pairWithGivenSum(arr []int, targetSum int) bool {
   var left, right int
   for left < right {
      if arr[left]+arr[right] == targetSum {
         return true
      } else if arr[left]+arr[right] < targetSum {
         left++
      } else {
         right--
      }
   }
   return false
}

func main() {
   arr := []int{10, 40, 30, 80, 50}
   targetSum := 7

   if pairWithGivenSum(arr, targetSum) {
      fmt.Printf("There exists a pair of numbers in the array that add up to %d\n", targetSum)
   } else {
      fmt.Printf("There does not exist a pair of numbers in the array that add up to %d\n", targetSum)
   }
}

输出

There does not exists a pair of numbers in the array that add up to 7

结论

我们已经成功编译并执行了一个 Go 语言程序,该程序使用迭代和优化迭代方法的双指针方法查找数组中是否存在两个数字之和等于给定目标和,并附带两个示例。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了优化迭代方法。

更新于: 2023年4月3日

262 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告