首页 > 代码库 > 【编程之美】2.17 数组循环位移
【编程之美】2.17 数组循环位移
题目:一个有N个元素的数组 循环右移k位 要求时间复杂度O(N) 只允许两个附加变量
abcd1234 循环右移4位 变成 1234abcd
做过 思路 (ATBT)T = BA
注意,K可能比N大,K也可能是负数(左移),要注意取余处理!!
#include <stdio.h>#include <string.h>void exchange(char * c, int begin, int end){ char tmp; for(; begin < end; begin++, end--) { tmp = c[begin]; c[begin] = c[end]; c[end] = tmp; }}int mod(int r, int c){ if(r >= 0) { return r % c; } else { return c + r % c; //这里 r%c 可以得到一个绝对值小于c的负数 再加上c 得到正数 }}void rightRotate(char * c, int clen, int k){ printf("%s\n", c); k = mod(k, clen); //注意这里 防止k是负数 或k大于clen !!!!!! 考虑全面很重要 exchange(c, 0, clen - k - 1); exchange(c, clen - k, clen - 1); exchange(c, 0, clen - 1); printf("%s\n", c);}int main(){ char c[20] = "hello, every one!" ; rightRotate(c, strlen(c), -6); return 0;}
【编程之美】2.17 数组循环位移
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。