将N个字符的数组,循环右移K位。时间复杂度O(N)

来源:互联网 发布:做人工智能的企业 编辑:程序博客网 时间:2024/05/21 16:41

思路:

示例:char a[] = {nihao},若k为12,size为5.

1.若k比数组的size大很多,则求模,得到适当大小的k值。k=k%size=2;

2.将【0,size-k)区间的值反转。{hinao}

3.将【size-k,size)区间的值反转。{hinoa}

4.将【0,size)区间的值反转。{aonih}

参考代码如下:

void Reverse(char a[],int l,int r){if(a==NULL)return;while (l<r)swap(a[l++],a[r--]);}void RightShift(char a[],int k,int size){if (a!=NULL){if(k>size)k %= size;Reverse(a,0,size-k-1);Reverse(a,size-k,size-1);Reverse(a,0,size-1);}}



阅读全文
0 0