快速旋转数组(或字符串)

来源:互联网 发布:象棋软件ios 编辑:程序博客网 时间:2024/05/21 08:03

介绍一种时间复杂度为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);}};


0 0