将N个字符的数组,循环右移K位。时间复杂度O(N)
比如:str[]=”abcde123”,右移3位
1、旋转abcde->edcba
2、旋转123->321
3、整体旋转abcde123->123abcde
void reverse(char *str, int left, int right)
{
while (left<right)
{
char tmp = str[right];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
void rightMove(char *str, int length, int k)
{
k = k%length;
//旋转前k个字符
reverse(str, 0, length - k - 1);
//旋转剩余字符
reverse(str, length - k, length - 1);
//整体旋转
reverse(str, 0, length - 1);
}
本文介绍了一种将字符数组循环右移K位的算法实现,通过三次反转操作达到目的,确保了时间复杂度为O(N)。具体步骤包括:1. 反转前N-K个元素;2. 反转剩余K个元素;3. 整体反转所有元素。
966

被折叠的 条评论
为什么被折叠?



