Golang 数组旋转
简介
在本教程中,我们将看到如何编写一个Go语言程序来旋转一个数组。我们要编写两个程序。一个是将数组向左旋转,另一个是将数组向右旋转。
旋转一个数组到左边的Golang程序
以下代码演示了如何使用用户定义的函数将数组向左旋转。
上述程序的算法
第一步 - 导入fmt包,允许我们在屏幕上打印任何东西。
第二步 - 创建一个名为rotateLeft()的函数,它在旋转后返回最终的数组。
第三步 - 该函数使用for循环遍历数组,并在每次迭代中调用rotateLeftByOne()函数。
第四步 - 该函数以数组作为参数,并使用for循环遍历数组变量。
第五步 - 在每次迭代中,我们将下一个值放置到前一个位置,并恢复第一个元素。
第六步 - 现在调用main()函数。
第七步 - 初始化一个整数数组并分配值给它。
第八步 - 在屏幕上打印数组,并调用rotateLeft()函数,将数组和元素应该被移动的次数作为参数传递给该函数。
第九步 - 使用fmt.Println()函数在屏幕上打印最终的数组。
示例
package main
import "fmt"
func rotateLeft(arr []int, count int) {
for i := 0; i < count; i++ {
rotateLeftByOne(arr)
}
}
func rotateLeftByOne(arr []int) {
var i int = 0
var temp int = arr[0]
for ; i < len(arr)-1; i++ {
arr[i] = arr[i+1]
}
arr[i] = temp
}
func main() {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
fmt.Println("The entered array is:", arr)
rotateLeft(arr, 7)
fmt.Println("The array obtained by rotating it to left by 7 positions is:", arr)
}
输出
The entered array is: [1 2 3 4 5 6 7 8]
The array obtained by rotating it to left by 7 positions is: [8 1 2 3 4 5 6 7]
Golang程序- 将数组向右旋转
以下代码演示了一个使用Go语言编写的程序,将数组的元素向右旋转任意次数。
上述程序的算法
步骤1 − 导入fmt包,该包允许我们在屏幕上打印任何内容。
步骤2 − 定义一个名为rotateRight()的函数,该函数将把数组向右旋转任意次数。
步骤3 − 使用for循环来遍历数组,并将倒数第二个元素存储在一个变量中。
步骤4 − 然后使用另一个for循环将元素向右移动到数组的长度。
步骤5 − 开始main()函数。这是程序的起始点,从这里开始执行。
步骤6 − 初始化一个整数数组并为其分配值。在屏幕上打印此数组。
步骤7 − 现在通过将数组和应该发生的移位次数作为参数传递给rotateRight()函数来调用它。
步骤8 − 使用fmt.Println()函数在屏幕上打印最终数组。
示例
package main
import "fmt"
func rotateRight(arr []int, count int) {
for i := 0; i < count; i++ {
var j, last int
length := len(arr)
last = arr[length-1]
for j = length - 1; j > 0; j-- {
arr[j] = arr[j-1]
}
arr[0] = last
}
}
func main() {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
// printing the array on the screen using fmt.Println() function
fmt.Println("The entered array is:", arr)
rotateRight(arr, 7)
fmt.Println("The array obtained by rotating it to right by 7 positions is:", arr)
}
输出
The entered array is: [1 2 3 4 5 6 7 8]
The array obtained by rotating it to right by 7 positions is: [2 3 4 5 6 7 8 1]
使用预定义函数将数组向右旋转
现在让我们来看一个使用预定义函数的程序,用它可以将数组变量向右旋转,但不使用循环和条件语句。
语法
func copy(dst, str[] type) int
go语言中的copy函数用于将一个源数组的值复制到目标数组中,并将复制的元素数量作为结果返回。它接受两个数组作为参数。
func make ([] type, size, capacity)
在 Go 语言中,make 函数用于创建数组/映射。它接受要创建的变量类型、大小和容量作为参数。
示例
package main
import "fmt"
func rotateRight(nums []int, k int) {
k %= len(nums)
new_array := make([]int, len(nums))
copy(new_array[:k], nums[len(nums)-k:])
copy(new_array[k:], nums[:len(nums)-k])
copy(nums, new_array)
}
func main() {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
fmt.Println("The entered array is:", arr)
rotateRight(arr, 7)
fmt.Println("The array obtained by rotating it to right by 7 positions is:", arr)
}
输出
The entered array is: [1 2 3 4 5 6 7 8]
The array obtained by rotating it to right by 7 positions is: [2 3 4 5 6 7 8 1]
结论
我们成功地编译并执行了一个Go语言程序,用示例演示了如何旋转数组的元素。