首页 > 代码库 > 2.17 数组循环移位
2.17 数组循环移位
题目:把一个含有N个元素的字符串右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。
例子:
字符串为:abcd1234,右移4位,结果变为:1234abcd
思路:
移动前跟移动后是有两段的顺序是不变的,所以可以把这两段看成两个整体
右移K位的过程就是把数组的两部分交换一下。
交换的过程:(1)逆序排列第一部分
(2)逆序排列第二部分
(3)再全部逆序!
代码:
#include <iostream> using namespace std; const int MAXN = 10000; int Array[MAXN], n, k; void Reverse(int *A, int b, int e) { for(; b < e; ++b, --e) { int temp = A[b]; A[b] = A[e]; A[e] = temp; } } void RightShift(int *A, int n, int k) { k %= n; Reverse(A, 0, n-k-1); Reverse(A, n-k, n-1); Reverse(A, 0, n-1); } int main() { cin >> n >> k; for(int i = 0; i < n; ++i) cin >> Array[i]; RightShift(Array, n, k); for(int i = 0; i < n; ++i) cout << Array[i]; cout << endl; return 0; }
2.17 数组循环移位
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。