(序列重排)全局数组变量 a 定义如下:
const int SIZE=100;
int a[SIZE],n;
它记录着一个长度为 n 的序列 a[1],a[2],…,a[n]。
现在需要一个函数,以整数 p(1<=p<=n) 为参数,实现如下功能:将序列 a 的前 p 个数与后 n-p 个数对调,且不改变这 p 个数(或 n-p 个数)之间的相对位置。例如,长度为 5 的序列 1,2,3,4,5,当 p=2 时重排结果为 3,4,5,1,2。
有一种朴素的算法可以实现这一需求,其时间复杂度为O(n)、空间复杂度为O(n):
void swap1(int p) {
int i,j,b[SIZE];
for (i=1;i<=p;i++) b[__1__]=a[i];
for (i=p+1;i<=n;i++) b[i-p]=__2__;
for (i=1;i<=__3__;i++) a[i]=b[i];
}
我们也可以用时间换空间,使用时间复杂度为O(n*n)、空间复杂度为O(1)的算法:
void swap2(int p) {
int i,j,temp;
for (i=p+1;i<=n;i++) {
temp=a[i];
for (j=i;j>=__4__;j--) a[j]=a[j-1];
__5__=temp;
}
}
相关文章
- 12-171001,instanceof关键字以及typeof关键字
- 12-17pat 1001-1005
- 12-17百度之星初赛签到(1001/1005)
- 12-17zoj1001-A + B Problem
- 12-17Exponentiation POJ-1001
- 12-17安装包安装服务,点修复出现的错误”Error 1001:指定的服务已存在“ 解决办法
- 12-17PAT-甲级-1001 A+B Format (20 分)
- 12-17LeetCode 1001. Grid Illumination
- 12-17[LeetCode] 1001. Grid Illumination
- 12-171001. 网格照明