我有一个简单的旋转功能,该功能需要一个数组和一个数字才能将数字向左旋转
例如[1,2,3,4,5] & 2
-输出:[3,4,5,1,2]
。
我想知道完成此功能的最有效方法,无论是将int数组转换为字符串并对其进行拼接,还是复制该数组还是将其转换为List<Integer>
。
如果有人需要其他信息,请询问!
我目前的解决方案:
static int[] rotLeft(int[] a, int d) {
int lengthOfArray = a.length;
int[] temp = new int[lengthOfArray];
for(int i = 0; i < lengthOfArray; i++){
int newLocation = (i + (lengthOfArray - d)) % lengthOfArray;
temp[newLocation] = a[i];
}
return temp;
}
答案 0 :(得分:1)
具有O(n)
复杂度的简单方法如下,对有效shifts int[] arr:
的处理是一个int数组,一个数组n=length
,d =需要多少移位。 / p>
public int[] leftRotate(int[] arr, int n, int d) {
int rot = 0;
int[] marr = new int[n];
if (d < 0 || d == 0 || d>n) {
return arr;
}
else {
for (int i = 0; i < n; i++) {
if (i < n - d) {
marr[i] = arr[i + d];
} else {
marr[i] = arr[rot];
rot++;
}
}
return marr;
}
}
public void GetArray(int[] arr, int n, int d) {
int[] arr1 = leftRotate(arr, n, d);
for (int j : arr1) {
System.out.println(j);
}
}
public static void main(String args[]) {
int[] arr = { 1,2,3,4,5 };
int n = arr.length;
Test2 obj = new Test2();
obj.GetArray(arr, n, 2);
}
答案 1 :(得分:-1)
你为什么不尝试这个
void Rotate(int arr[], int d, int n)
{
for (int i = 0; i < d; i++)
leftRotatebyOne(arr, n);
}
void leftRotatebyOne(int arr[], int n)
{
int i, temp;
temp = arr[0];
for (i = 0; i < n - 1; i++)
arr[i] = arr[i + 1];
arr[i] = temp;
}
并按如下所示调用此invoke方法
int arr[] = { 1, 2, 3, 4, 5 };
Rotate(arr, 2, 5);