Java 实现 将n(n>1)个整数存放在一维数组R中,设计一个在时间和空间两方面都尽可能高效的算法。 将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据(x0,x1,x2,…x(n-1))变换为(xp,x(p+1),…,x(n-1),x0,x1,…,x(p-1))
时间: 2024-03-12 11:48:28 浏览: 107
JAVA实现各种算法
这道题可以使用三次翻转法来解决,具体步骤如下:
1. 翻转前p个元素;
2. 翻转后n-p个元素;
3. 翻转整个数组。
Java代码实现如下:
```java
public static void leftRotate(int[] arr, int p) {
int n = arr.length;
p %= n;
reverse(arr, 0, p - 1);
reverse(arr, p, n - 1);
reverse(arr, 0, n - 1);
}
private static void reverse(int[] arr, int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
```
其中,`arr`为要进行操作的数组,`p`为左移的位数。函数首先对`p`进行取余,以防`p`大于数组长度。然后,分别翻转前`p`个元素、后`n-p`个元素和整个数组。
示例调用:
```java
int[] arr = {1, 2, 3, 4, 5};
leftRotate(arr, 2);
System.out.println(Arrays.toString(arr)); // 输出:[3, 4, 5, 1, 2]
```
这个函数可以将数组`[1, 2, 3, 4, 5]`左移2位,结果为`[3, 4, 5, 1, 2]`。
阅读全文