JAVA简单算法设计与分析【实验要求】设计一个时间复杂度为O(n)的算法,实现将数组arr[n]中所有元素循环左移k个位置。
时间: 2024-09-08 10:04:04 浏览: 58
算法设计与分析期末之动态规划第3题Partition.zip
在 Java 中,设计一个时间复杂度为 O(n) 的算法来实现数组的循环左移操作,可以使用一个辅助数组来保存原数组的内容,然后直接填充到原数组的位置上。这里提供一个简单的步骤:
1. 首先,创建一个新的数组 temp,大小与原数组 arr 相同。
2. 从索引 k 开始遍历原数组 arr,将每个元素复制到临时数组 temp 的对应位置,即 temp[(i - k + n) % n] = arr[i]。这里的 `(i - k + n) % n` 确保了当 k 超过数组长度时,也能正确处理元素的移动。
3. 将临时数组 temp 的内容回填到原数组 arr,即 arr[i] = temp[i],同样使用 `% n` 来处理溢出的情况。
下面是一个简单的 Java 实现示例:
```java
public void circularLeftShift(int[] arr, int k) {
if (arr == null || arr.length <= 0) {
return;
}
// 辅助数组
int[] temp = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
temp[(i - k + arr.length) % arr.length] = arr[i];
}
// 回填原数组
for (int i = 0; i < arr.length; i++) {
arr[i] = temp[i];
}
}
```
阅读全文