5.14 2010年408数据结构算法题

设 将 n(n>1)个整数存放到一维数组 R 中。试设计一个在时间和空间两方面都尽可能高效的算法。将 R 中保存的序列循环左移 p(0<p<n)个位置,即将 R 中的数据由(X0, X1…Xn-1)变换为(Xp, Xp+1 …Xn-1, X0, X1…Xp-1)。要求:

⑴ 给出算法的基本设计思想。

⑵ 根据设计思想,采用 C 或 C++或JAVA 语言描述算法,关键之处给出注释。

⑶ 说明你所设计算法的时间复杂度和空间复杂度。

tips:已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3,am)(b1,b2,b3,...bn)编写一个函数将数组中两个顺序表位置互换,将b的数组放在a前面

简单暴力解法:将a数组的下标+n,b数组下标-m

void change(int A[],int m,int n)
{
    if(0) return false;
    int *ans=(int *)malloc((m+n)*sizeof(int));
    for(int i=0;i<m;i++)
    {
        ans[i+n]=A[i];
    }
    for(int i=0;i<n;i++)
    {
        ans[i]=A[i+m];
    }
    for(int i=0;i<m+n;i++)
    {
        A[i]=ans[i];
    }
    free(ans);
}

时间空间复杂度O(m+n)

回到原题

把数组 ab 转换成数组 ba(a 代表数组的前 p 个元素,b 代表数组中余下的 n-p 个元素),先将 a 逆置得到a逆b,再将b 逆置得到a逆b逆,最后将整个a逆b逆 逆置得到(a-1b-1)逆=ba。设 Reverse 函数执行将数组元素逆置的操作,对abcdefgh 向左循环移动 3(p=3)个位置的过程如下:

reverse函数作用:依次交换前后两部分对应位置的值 比如abc,交换ac变成cba,defgh变成hgfed

吐个槽:温差好大,感冒了,状态好差今天 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值