手摇算法(也叫三次反转算法)
看题:将字符串abcdefg,变成efgabcd,要求空间复杂度O(1)。
解答:
核心代码:
void shiftBlocks(int arr[], int start, int pos, int end)
{
reverse(arr,start,pos-1);
reverse(arr,pos,end);
reverse(arr,start,end);
}
void reverse(int arr[], int start, int end)
{
for(int i=start, j=end; i<j; i++,j--)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
原文地址:http://blog.csdn.net/tommyzht/article/details/47165797