计算时间复杂度最优化
已知一个长度为n的数组和一个正整数k,并且最多只能使用一个用于交换的附加空间单元,试设计算法得到原数组循环右移k次的结果,要求他的时间复杂度为 n(即与k无关)
2010-09-24 14:29
程序代码: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);
} 
2010-09-24 22:14