给定n整数和数字d数组,对数组执行左旋转。然后将更新后的数组打印为单行以空格分隔的整数。
n
d
输入样例:
5 4 1 2 3 4 5
第一行包含两个以空格分隔的整数,分别表示n(整数数)和d(必须执行的左旋转数)的值。第二行包含用n空格分隔的整数,这些整数描述了数组初始状态的各个元素。
样本输出:
5 1 2 3 4
static void Main(String[] args) { string[] arr_temp = Console.ReadLine().Split(' '); int n = Int32.Parse(arr_temp[0]); int d = Int32.Parse(arr_temp[1]); string[] arr = Console.ReadLine().Split(' '); string[] ans = new string[n]; for (int i = 0; i < n; ++i) { ans[(i + n - d) % n] = arr[i]; } for (int j = 0; j < n; ++j) { Console.Write(ans[j] + " "); } }
如何使用较少的内存来解决此问题?
在大多数情况下,这将使用较少的内存,因为第二个数组仅与移位一样大。
public static void Main(string[] args) { int[] n = { 1, 2, 3, 4, 5 }; LeftShiftArray(n, 4); Console.WriteLine(String.Join(",", n)); } public static void LeftShiftArray<T>(T[] arr, int shift) { shift = shift % arr.Length; T[] buffer = new T[shift]; Array.Copy(arr, buffer, shift); Array.Copy(arr, shift, arr, 0, arr.Length - shift); Array.Copy(buffer, 0, arr, arr.Length - shift, shift); }