数据结构面试题总结8——数组:数组循环移位
2015-05-31 15:43
417 查看
问题描述:将一个含有n个元素的数组向右循环移动k位,要求时间复杂度是O(n),且只能使用两个额外的变量。
分析:不能使用额外的变量就把我们限制了,如果使用一个同样长度的数组,我们在O(n)时间复杂度下就变的非常简单了。
加上俩那个额外变量的条件后我们再分析:假设原数组为123456,右移两位为561234。我们把数组分成两部分1234和56,分别翻转,原数组变为432165,再次对整个数组翻转,为561234,就是我们要的结果。
分析:不能使用额外的变量就把我们限制了,如果使用一个同样长度的数组,我们在O(n)时间复杂度下就变的非常简单了。
加上俩那个额外变量的条件后我们再分析:假设原数组为123456,右移两位为561234。我们把数组分成两部分1234和56,分别翻转,原数组变为432165,再次对整个数组翻转,为561234,就是我们要的结果。
void MyReverse(int *a ,int start, int end) { int temp = 0; while (start < end) { temp = a[start]; a[start++] = a[end]; a[end--] = temp; } } void MyShift(int *a, int n , int k) { k = k % n; MyReverse(a,0,n-k-1); MyReverse(a,n-k,n-1); MyReverse(a,0,n-1); }
相关文章推荐
- 数据结构之---C/C++实现稀疏矩阵的十字链表
- 【算法笔记】数据结构(一)
- 数据结构与算法分析-队列
- 数据结构与算法分析-栈
- 数据结构与算法分析-表
- 数据结构之---C语言实现矩阵的转置
- 数据结构教程 冒泡算法
- hdu 5249区间第k大(学习了下树状数组的搞法)
- 一个简单的数据结构举例——二叉树及…
- 一个简单的数据结构举例——快排结合…
- 【技术-数据结构与算法分析】一致性哈希算法与Java实现
- CodeForces 140C - New Year Snowmen(数据结构)
- 数据结构面试题总结7——数组:最大连续子段和、最大连续子段积
- COJ 1002 WZJ的数据结构(二)(splay模板)
- 数据结构面试题总结6——数组:求两个数组中满足给定和的两个元素
- 数据结构与算法分析——C语言描述
- 稀疏矩阵的快速转置
- 数据结构面试题总结5——数组:找出数组中唯一一个出现一次的元素
- 数据结构之---C语言实现稀疏矩阵
- 数据结构面试题总结4——数组:求两个有序数组中的共同元素