我写了一个方法,它接受一个数字数组并移动数字,然后返回移动后的数组。
如下:
private static int[] ShiftArray(int[] arr, int shift)
{
shift = shift % arr.Length;
int[] tmpArr = new int[shift];
for (int i = 0; i < tmpArr.Length; i++)
{
tmpArr[i] = arr[arr.Length - 1 - i];
}
for (int i = arr.Length - 1; i >= shift; i--)
{
int index = Math.Abs(i - shift);
if (index >= 0)
{
arr[i] = arr[index];
}
}
for (int i = 0; i < tmpArr.Length; i++)
{
arr[i] = tmpArr[tmpArr.Length - 1 - i];
}
return arr;
}
我想改进该方法,使其不会消耗内存。我很高兴知道如何改进它以及如何查看为该方法分配了多少内存?
编辑
示例 1:
Input: int[]{1,2,3,4,5,6}, shift:2
Output: int[]{5,6,1,2,3,4}
示例 2:
Input: int[]{1,2,3,4,5,6}, shift:15
Output: int[]{4,5,6,1,2,3}