算法设计——

本文介绍了一种在O(n)时间复杂度内完成数组元素循环左移k个位置的高效算法。通过三次逆置操作,分别逆置前k个元素、剩余元素以及整个数组,实现了元素的循环左移。该算法巧妙利用了逆置操作的特性,避免了多次元素移动,从而达到了线性时间复杂度。

设计一个时间复杂度为O(n)的算法,实现将数组A(n)中所有元素循环左移k个位置。
循环左移年法Conversce
void Converse(int A[ ], int n, int k)
{
Reverse(A, 0, k-1);
Reverse(A, k, n-1);
Reverse(A, 0, n-1);
}
void Reverse(int A[ ], int from, int to) //将数组A中元素从from到to逆置
{
for(i=0;i< (to- from + 1)/2; i++)
A[from +i]←→A[to-i]; //交换元素

分析算法,第一次调用Reverse丽数的时间复杂度为O(k),第二次调用Reverse的复杂度为O(n-k),第三次调用Reverse丽数的时间复杂度为O(n),所以总时间复杂度为O(n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值