如何编写函数shift(int* arr, int k)
将数组循环移位某个整数 k?我不能从堆中说“malloc”内存。
例如,使用伪代码、shift([1, 2, 3, 4], 2)
返回[3, 4, 1, 2]
和shift([3, 1, 5, 5], 103)
返回[1, 5, 5, 3]
。我尝试过使用模数来实现这种效果,如这个 Java 程序所示,其中我基本上迭代了一半的数组并交换值。
public static int* shift(int* arr, int k) {
int half_array_len = arr.length / 2;
for (int i = 0; i < half_array_len; ++i) {
// Swap!
int newIndex = (i + k) % arr.length;
int temp = arr[i];
arr[i] = arr[newIndex];
arr[newIndex] = arr[i];
}
return arr;
}
但是,我相信这个函数只适用于偶数长度的数组。
如何实现shift
任意长度的数组?答案可以是您想要的任何语言(Java、C++、Ook Ook!等)。