介绍一种时间复杂度为O(n),空间复杂度为O(1)的算法。俗称三步翻转法。
例如想把“123456”旋转为“456123”,第一步,旋转123为321,第二部旋转456为654,整个变为“321654”,第三步对此整体做一次旋转,即变为“456123”
class QuickReverse {
private:
void reverse(int arr[], int begin, int end) {
for(int i=begin, j=end; i<j; i++, j--) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
public:
void quickReverse(int arr[], int size, int loc) {
reverse(arr, 0, loc);
reverse(arr, loc+1, size-1);
reverse(arr, 0, size-1);
}
};