手摇算法(也叫三次反转算法)
看题:将字符串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