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 - 然后,将左右指针处的元素之和与目标和进行比较。如果和小于目标和,则增加左指针。如果和大于目标和,则减小右指针。
-
步骤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语言程序,使用双指针方法和迭代优化方法,在给定的目标和中寻找数组中是否存在一对数字相加。我们提供了两个示例。在第一个示例中,我们使用了迭代方法,而在第二个示例中,我们使用了优化的迭代方法。