Golang程序 阵列旋转

用于阵列旋转的Golang程序

简介

在本教程中,我们将看到写一个Go语言程序来旋转一个数组。我们将为此写两个程序。一个是将数组向左旋转,另一个是将其向右旋转。

将数组向左旋转的Golang程序

下面的代码说明了我们如何使用一个用户定义的函数将一个数组旋转到左边。

上述程序的算法

第1步 – 导入fmt包,使我们能够在屏幕上打印任何东西。

第2步 – 创建一个名为rotateLeft()的函数,返回旋转后的最终数组。

第3步 – 这个函数使用for循环来迭代数组,并在每次迭代中调用rotateLeftByOne()函数。

第4步 – 该函数将数组作为参数,并使用for循环来迭代数组变量。

第5步 – 在每一次迭代中,我们都将下一个值放置到之前的位置,并恢复第一个元素。

第6步 – 现在调用main()函数。

第7步 – 初始化一个整数数组并为其赋值。

第8步 – 将数组打印在屏幕上,并将数组和元素应被移动的次数作为参数传给函数,从而调用rotateLeft()函数。

第9步 – 使用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语言程序来旋转一个数组的元素,同时还有一些例子。