编程之美2.17 数组循环移位
问题描述:
设计一个算法,把一个含有N元素的数组循环左移或者右移K位。
解决方法:
1. 暴力解法------O(KN)
2. 颠倒位置------O(N)
具体思路和代码:
1. 暴力解法------O(KN)
思路:循环K次,每次移动一位
代码:
1 //右移 2 void s1(int A[], int n, int k) 3 { 4 k = k % n; 5 for(int i = 0; i < k; i++) 6 { 7 int t = A[n-1]; 8 for(int j = n-1; j > 0; j--) 9 { 10 A[j] = A[j-1]; 11 } 12 A[0] = t; 13 } 14 }
1 //左移 2 void s3(int A[], int n, int k) 3 { 4 k = k % n; 5 for(int i = 0; i < k; i++) 6 { 7 int t = A[0]; 8 for(int j = 1; j < n; j++) 9 { 10 A[j-1] = A[j]; 11 } 12 A[n-1] = t; 13 } 14 }
2. 颠倒位置------O(N)
思路:
例如:1 2 3 4 5 6 7 8 右移2位
3 4 5 6 7 8 1 2
我们分解下: 先对换(0, n-k-1) :1 2 3 4 5 6 -> 6 5 4 3 2 1
再对换 (n-k, n-1):7 8 -> 8 7
-> 6 5 4 3 2 1 8 7
整体对换:7 8 1 2 3 4 5 6
代码:
1 //右移 2 void reverse(int A[], int l, int r) 3 { 4 for(int i = l, j = r; i < j; i++, j--) 5 { 6 int t = A[i]; 7 A[i] = A[j]; 8 A[j] = t; 9 } 10 } 11 12 void s2(int A[], int n, int k) 13 { 14 reverse(A, 0, n-k-1); 15 reverse(A, n-k, n-1); 16 reverse(A, 0, n-1); 17 }
1 //左移 2 void s4(int A[], int n, int k) 3 { 4 reverse(A, 0, k-1); 5 reverse(A, k, n-1); 6 reverse(A, 0, n-1); 7 }
转载于:https://www.cnblogs.com/panpannju/p/3733204.html
编程之美2.17 数组循环移位相关推荐
- 编程之美2.17 数组循环移位
这是一个很经典的题目,题目的大概意思是这样的: 有一个存储字符串的数组,需要按照要求循环移动数组中的字符,例如,数组中存储字符 abcd1234,循环右移4位,之后,会得到这样一个字符数组 ...
- c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度
改进的方法看的头大了却还是不清楚,哎...搞算法的苦啊,纠结啊. 编程之美这本书里面就有关于这道题的一些解法,求一个一位数组中的最长序列的长度.例如,在序列1,3,2中,最长递增序列是1,3. 这道题 ...
- 编程之美2.10:寻找数组中的最大值和最小值
编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...
- 编程之美2.1 求二进制中1的个数
最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...
- 2017“编程之美”终章:AI之战勇者为王
编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...
- Java 并发编程之美:并发编程高级篇之一-chat
借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...
- Java 并发编程之美:并发编程高级篇之一
借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...
- 编程之美2.15 二维数组最大子数组的和(数组下标从(1,1)开始)
首先,我们看到这篇文章的题目,我们就会想到之前的那个题目 -- 连续子数组最大和问题.这个问题无疑就是把原问题扩展到二维的情况. 想起来这个问题也不是很难,我们可以求解一维矩阵 ...
- 编程之美2.14 求数组的子数组之和的最大值
这是一个在面试中出现概率很高的一道题目,就拿我来说吧,面试了5家公司中,两家公司问了这道题目,可见,这道题目是非常经典的. 解题思想也不是很难,我熟悉的有:两种解题办法: ...
最新文章
- 循环for语句 if语句
- 你应该在开始API开发之前知道的事(下)(翻译)
- 前端错误信息收集(errorEruda)解析
- Ganglia 应用实践
- [Unity] 3D数学基础 - 坐标系、向量、矩阵
- springboot使用ImportBeanDefinitionRegistrar 动态注册bean
- 怎么查看usb读取信息_电脑弹出USB设备时提示该设备正在使用中的解决方法
- findler mac 隐藏文件_fiddler使用实例之----------查找隐藏的真实地址!!!!
- python编程100个小程序-整理了适合新手的20个Python练手小程序
- edui 富文本编辑_ueditor集成秀米编辑器
- 论文中的CNN网络绘制软件
- vhs预设_vhs vs beta原始格式大战的故事
- Excel快速下拉填充序列至10000行
- 14.嵌入式控制器EC实战 SMBus读取电池信息并控制充放电
- hevc编码merge 模式
- 设置Windows控制台颜色
- CentOS禁止Ping方法
- 多线程(二)互斥锁详解
- 大连暗泉渗透/红队岗面试题(高级渗透测试工程师面试题)总结
- Python 计算思维训练——输入和错误处理练习(二)第三关
热门文章
- python类方法需要传入cls参数_如何从Python 3.x中的类定义传递参数到元类?
- php 过滤注释,PHP过滤html注释
- access中主键自动增长_ACCESS与EXCEL融合应用系列(一) :把数据导入Access
- php怎么将网页另存为mht代码,mht转html代码(php)
- oracle连接eclipse的包,【求助】eclipse导入了Oracle的驱动包连不上Oracle
- Spring @PropertySource
- Python SHA1算法
- scrapy item.py
- clang mingw
- opencv-api filter2D