【编程之美】2.17 数组循环位移
2014-11-12 22:48
141 查看
题目:一个有N个元素的数组 循环右移k位 要求时间复杂度O(N) 只允许两个附加变量
abcd1234 循环右移4位 变成 1234abcd
做过 思路 (ATBT)T = BA
注意,K可能比N大,K也可能是负数(左移),要注意取余处理!!
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 数组循环移位
- 编程之美-2.17 数组移位循环
- 读书笔记之编程之美 - 2.17 数组循环移位
- 编程之美-2.17-数组循环移位
- 编程之美的2.17,数组循环移位 & 字符串逆转(反转) Hello world Welcome => Welcome world Hello
- 编程之美 2.17 数组循环移位
- [编程之美] PSet2.17 数组循环移位
- 编程之美 2.17 数组循环移位
- 编程之美2.17——数组循环移位
- 《编程之美》读书笔记09: 2.17 数组循环移位
- 编程之美2.17 数组循环移位
- 编程之美2.17 数组循环移位
- 编程之美2.17 数组循环移位
- Java笔记1 Java编程基础<2>循环语句、函数(重载)、变量和数组的内存结构
- c#经典编程实例(一基本的输入输出和循环数组的使用)
- 《编程之美》读书笔记(九):数组循环位移
- 【算法编程】循环右移一个数组
- 2.17 数组循环移位
- 2.17数组循环移位
- 编程之美 数组循环移位