【发布时间】:2017-11-23 06:55:26
【问题描述】:
给定一个包含 n 个整数和一个数字 d 的数组,对数组执行左旋转。给定数组 [1,2,3,4,5] 的示例,移位将始终 [2,3,4,5,1]。我已经写了下面的代码,它工作正常可以进一步优化,因为我的时间复杂度是 O(n^2)
代码:
public static int[] arrayLeftRotation(int[] a, int n, int k) {
if (n == 1 || n == k)
return a;
else {
int track = 0;
while (track < k) {
int start = a[0];
for (int i = 0; i < n - 1; i++) {
a[i] = a[i + 1];
}
a[n - 1] = start;
track++;
}
return a;
}
}
【问题讨论】:
-
确定是
O(nk)? -
是的,它的 O(nk),因为它有一个外部 while 和内部 for 循环权......
-
我发现
java.util.Collections类对于这类事情来说非常好读。 -
用
LinkedList这样会不会最有效率,我有感觉。