使用双指针法判断给定子数组是否存在于给定数组中的Go语言程序
在这篇Go语言文章中,我们将学习如何使用双指针法,结合迭代和优化迭代方法,判断给定子数组是否存在于给定数组中。数组是由相同数据类型元素组成的集合,这些元素排列在连续的内存块中,并使用索引或下标访问。
语法
func isSubarrayPresent(arr []int, sub []int) bool {…}
isSubarrayPresent() 函数用于使用双指针法判断给定子数组是否存在于给定数组中。它接受数组和子数组作为参数。
算法
步骤1 − 首先,我们需要导入 fmt 包。
步骤2 − 现在,创建一个 isSubarrayPresent() 函数,该函数接受整数类型的数组和子数组。此函数将返回一个布尔值,指示子数组是否存在于数组中。
步骤3 −
示例1 −
如果子数组的长度为零,这意味着它是空的,并且存在于任何数组中。在这种情况下,返回 true。否则,使用 for 循环使用某些条件将子数组的元素与数组的元素进行匹配。如果子数组的所有元素都存在于数组中,则返回 true,否则返回 false。
示例2 −
它首先检查子数组的长度是否大于数组的长度,如果大于,则返回 false。否则,使用带有 if-else 条件的 for 循环,使用某些条件将子数组的元素与数组的元素进行匹配。如果匹配,则函数递增 j 以继续处理子数组的下一个元素。如果没有匹配,则函数将 j 重置为零,并递增 i 以继续处理数组的下一个元素。如果子数组的所有元素都存在于数组中,则返回 true,否则返回 false。
步骤4 − 启动 main() 函数。在 main() 函数中,初始化数组和子数组。
步骤5 − 现在,调用 isSubarrayPresent() 函数并将数组和子数组传递给它。
步骤6 − 此外,使用 fmt.Println() 函数打印结果布尔值。
示例1
在这个示例中,我们将使用迭代方法定义一个 isSubarrayPresent() 函数,该函数用于使用双指针法判断给定子数组是否存在于给定数组中。
package main import "fmt" func isSubarrayPresent(arr []int, sub []int) bool { if len(sub) == 0 { return true } i := 0 j := 0 for i < len(arr) { if arr[i] == sub[j] { j++ if j == len(sub) { return true } } else { i -= j j = 0 } i++ } return false } func main() { arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} sub1 := []int{2, 3, 4} sub2 := []int{4, 3, 2} sub3 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} fmt.Println(isSubarrayPresent(arr, sub1)) fmt.Println(isSubarrayPresent(arr, sub2)) fmt.Println(isSubarrayPresent(arr, sub3)) }
输出
true false false
示例2
在这个示例中,我们将以优化的方式使用迭代方法定义一个 isSubarrayPresent() 函数,该函数用于使用双指针法判断给定子数组是否存在于给定数组中。
package main import "fmt" func isSubarrayPresent(arr []int, sub []int) bool { n := len(arr) m := len(sub) if m > n { return false } i := 0 j := 0 for i < n && j < m { if arr[i] == sub[j] { j++ } else if j > 0 && arr[i] == sub[j-1] { j-- continue } else { i = i - j j = 0 } i++ } return j == m } func main() { arr := []int{10, 20, 30, 40, 50, 60, 70, 80, 90} s1 := []int{40, 50, 9} s2 := []int{5, 2, 10} s3 := []int{10, 20, 30, 40, 50} fmt.Println(isSubarrayPresent(arr, s1)) fmt.Println(isSubarrayPresent(arr, s2)) fmt.Println(isSubarrayPresent(arr, s3)) }
输出
false false true
结论
我们已经成功编译并执行了一个 Go 语言程序,该程序使用双指针法判断给定子数组是否存在于给定数组中,并附带两个示例。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了优化迭代方法。