JavaScript 循环旋转数组

JavaScript 循环旋转数组

循环旋转意味着将每个索引处的值向左或向右移动一个位置,并用其他角落的值来替换最边上的值。左旋转时,第一个索引的值将移到最后一个索引处,并且对于所有索引,其值将为后一个索引处的值。右旋转的情况与左旋转正好相反。在本文中,我们将看到关于如何对数组进行旋转的正确代码和实现方法。

问题简介

在给定的问题中,我们将获得一个数组,并返回或打印一个与给定数组循环旋转的数组。循环旋转可以是左循环旋转或右循环旋转。

在右循环旋转中,从第一个索引到最后一个索引的每个元素都包含前一个索引的值,而第0个索引包含的值为最后一个索引处的值。

在左循环旋转中,从第0个索引到倒数第二个索引的每个元素都包含下一个索引的值,而最后一个索引包含的值为第0个索引处的值。

例如:

Given array: 1 2 3 4 5 6
Left rotation: 2 3 4 5 6 1
Right rotation: 6 1 2 3 4 5

让我们先来看一下解决这个问题的方法。

方法

在这个程序中,我们将遍历数组,并将当前元素的值赋给右旋转的前一个元素的值,将下一个元素的值赋给当前元素的值。我们将使用一个额外的变量来存储第一个和最后一个元素的值,以便在左旋转和右旋转时将其赋给最后一个元素和第一个元素。

示例

// definging function to rotate the array in left direction 
function Left_rotate(arr){
   var n = arr.length
   var temp = arr[0]

   // traversing over the array 
   for(var i = 0; i < n-1; i++){
      arr[i] = arr[i+1];
   }
   arr[n-1] = temp;
   console.log("Array after left rotation is: " )
   console.log(arr)
}

// definging function to rotate the array in right direction 
function Right_rotate(arr){
   var n = arr.length
   var temp = arr[n-1]

   // traversing over the array 
   for(var i = n-1; i >0; i--)    {
      arr[i] = arr[i-1];
   }
   arr[0] = temp;
   console.log("Array after right rotation is: " )
   console.log(arr)
}

// defining the array 
var arr = [1, 2, 3, 4, 5, 6];
console.log("Given array is: ")
console.log(arr)
Left_rotate(arr)

// redefining the array 
arr = [1, 2, 3, 4, 5, 6]
Right_rotate(arr)

时间和空间复杂度

上述代码的时间复杂度为O(N),其中N是数组的大小,空间复杂度为O(1),因为我们没有使用额外的空间。

另一种方法

在之前的方法中,我们维护了第一个或最后一个元素,然后将其赋值。在这种方法中,我们将当前元素与下一个元素交换,并将第一个或最后一个元素移动到所需的位置。让我们看看代码-

示例

// definging function to rotate the array in left direction 
function Left_rotate(arr){
   var n = arr.length
   var i = 0, j = n-1;
   var temp 
   while(i != j){
      temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
      j--;
   }
   console.log("Array after left rotation is: " )
   console.log(arr)
}

// definging function to rotate the array in right direction 
function Right_rotate(arr){
   var n = arr.length
   var i = 0, j = n-1;
   var temp 
   while(i != j){
      temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
      i++;
   }
   console.log("Array after right rotation is: " )
   console.log(arr)
}

// defining the array 
var arr = [1, 2, 3, 4, 5, 6];
console.log("Given array is: ")
console.log(arr)
Left_rotate(arr)

// redefining the array 
arr = [1, 2, 3, 4, 5, 6]
Right_rotate(arr)

时间和空间复杂度

以上代码的时间复杂度为O(N),其中N为数组的大小,空间复杂度为O(1),因为我们没有使用任何额外的空间。

结论

在本教程中,我们实现了一个JavaScript程序,将数组按循环顺序旋转一次。循环旋转意味着将每个索引处的值向左或向右移动一个位置,并使一个角落的值变成另一个角落的值。我们看到了两种方法,一种是基于赋值属性的,另一种是基于交换元素的。两种方法的时间复杂度均为O(N)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程