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!など)にすることができます。