博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【编程之美】2.17 数组循环位移
阅读量:5223 次
发布时间:2019-06-14

本文共 895 字,大约阅读时间需要 2 分钟。

题目:一个有N个元素的数组 循环右移k位 要求时间复杂度O(N)  只允许两个附加变量

abcd1234 循环右移4位  变成 1234abcd

 

做过 思路  (ATBT)T = BA

注意,K可能比N大,K也可能是负数(左移),要注意取余处理!!

#include 
#include
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;}

 

转载于:https://www.cnblogs.com/dplearning/p/4093772.html

你可能感兴趣的文章
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
js += 含义(小知识)
查看>>
B2321 [BeiJing2011集训]星器 数学&&物理
查看>>
201571030319 四则运算
查看>>
RestTemplate 调用本地服务 connection refused
查看>>
.NET方向高级开发人员面试时应该事先考虑的问题
查看>>
台达PLC modbus 不支持04功能码
查看>>
python学习笔记--装饰器
查看>>
发布一个JavaScript工具类库jutil,欢迎使用,欢迎补充,欢迎挑错!
查看>>
discuz 常用脚本格式化数据
查看>>
MS CRM 2011 创建基于Fetch的报表 -- 进阶版
查看>>