计算时间复杂度最优化
已知一个长度为n的数组和一个正整数k,并且最多只能使用一个用于交换的附加空间单元,试设计算法得到原数组循环右移k次的结果,要求他的时间复杂度为 n(即与k无关)void Reverse(int *Arr, int Begin, int End) { while(Begin < End) // 以中心为对称点,分别交换对偶位置上的数 { int Temp = Arr[Begin]; Arr[Begin] = Arr[End]; Arr[End] = Temp; Begin++; End--; } } void Shift(int *Arr, int N, int k) { Reverse(Arr, 0, k - 1); Reverse(Arr, k, N - 1); Reverse(Arr, 0, N - 1); }