Java 数组的反转算法进行右旋
数组是一种线性数据结构,用于存储具有相似数据类型的元素组。它以顺序方式存储数据。一旦我们创建了一个数组,我们就不能改变其大小,也就是说它只能存储固定数量的元素。
这篇文章将帮助您理解反转算法,并且我们将创建一个Java程序,在该程序中,我们创建一个数组,并通过应用反转算法来执行右旋。
数组的右旋
让我们在数组的上下文中理解右旋的概念。
在数组的右旋中,我们只需将数组的元素向右移动指定的旋转次数即可。
示例1
示例2
在上面的示例中,当我们将数组旋转2次时,从第0个位置开始的元素会被移动到第2个位置及以后的位置,并且最后两个元素会被第一、第二个位置填充。
当我们将数组旋转4次时,从第0个位置开始的元素会被移动到第4个位置及以后的位置。
声明数组的语法
Data_Type nameOfarray[];
// declaration
Or,
// declaration with size
Data_Type nameOfarray[] = new Data_Type[sizeofarray];
我们可以在我们的程序中使用上面任何一种语法。
反转算法
反转算法的方法如下:
- 步骤1 - 首先,我们将从第一个索引到最后一个索引反转给定的数组。
-
步骤2 - 接下来,我们将从第一个索引到rt – 1(其中rt是所需旋转的次数)反转给定的数组。
-
步骤3 - 在最后一步,我们将反转剩余的数组,即从rt到最后一个索引。
注意,为了移动数组的元素,我们将对它们进行交换。
使用反转算法进行向右旋转的程序
我们将把逻辑放在自定义的方法中。让我们讨论一下如何创建一个自定义的方法。
语法
accessSpecifier nonAccessModifier return_Type nameOfmethod(Parameters) {
// your code will come here
}
- accessSpecifier − 它用于设置方法的可访问性。可以是public、protected、default和private。
-
nonAccessModifier − 显示方法的额外功能或行为,例如static和final。
-
return_Type − 方法将返回的数据类型。当方法不返回任何内容时,我们使用void关键字。
-
nameOfmethod − 方法的名称。
-
parameters − 包含变量名称后跟数据类型。
示例
public class Rotation {
public void rev(int rot_arr[], int first, int last) {
while(first < last) {
int temp = rot_arr[first];
rot_arr[first] = rot_arr[last];
rot_arr[last] = temp;
first++;
last--;
}
}
public int[] rotates(int rot_arr[], int rt) {
rt = rt % rot_arr.length;
rev(rot_arr, 0, rot_arr.length - 1);
rev(rot_arr, 0, rt - 1);
rev(rot_arr, rt, rot_arr.length - 1);
return rot_arr;
}
public static void main(String[] args) {
Rotation obj = new Rotation();
int rot_arr[] = {5, 8, 2, 4, 7, 1};
int rt = 4;
System.out.print(" The given array is: ");
for(int i = 0; i < rot_arr.length; i++) {
System.out.print(rot_arr[i] + " ");
}
obj.rotates(rot_arr, rt);
System.out.println();
System.out.print(" The given array after right rotation is: ");
for(int i = 0; i < rot_arr.length; i++) {
System.out.print(rot_arr[i] + " ");
}
}
}
输出
The given array is: 5 8 2 4 7 1
The given array after right rotation is: 2 4 7 1 5 8
在上面的代码中,我们创建了一个名为”Rotation”的类,并在该类中创建了两个带有参数的方法”rev”和”rotates”。”rev”方法用于交换元素,”rotates”方法用于应用反转算法的逻辑。在main()方法中,我们创建了一个名为”obj”的”Rotation”类的对象,并使用该对象调用了带有两个参数的”rotates”方法。
结论
在本文中,我们了解了右旋转的概念,并讨论了反转算法。我们使用反转算法编写了一个Java程序来实现数组的右旋转。