C++程序 用于数组旋转的反转算法
编写一个函数rotate(arr[],d,n),该函数将大小为n的arr[]数组旋转d个元素。
示例:
输入 : arr[] = [1, 2, 3, 4, 5, 6, 7]
d = 2
输出 : arr[] = [3, 4, 5, 6, 7, 1, 2]
将上述数组旋转2个元素
方法4(反转算法):
算法:
让AB是输入数组的两个部分,其中A=arr[0..d-1],B=arr[d..n-1]。该算法的思想是:
- 将A反转以获得ArB,其中Ar是A的反转。
- 将B反转以获得ArBr,其中Br是B的反转。
- 反转所有到(ArBr)r=BA。
示例:
让数组arr[]=[1,2,3,4,5,6,7],d=2,n=7
A=[1,2],B=[3,4,5,6,7]
- 反转A,我们得到ArB=[2,1,3,4,5,6,7]
- 反转B,我们得到ArBr=[2,1,7,6,5,4,3]
- 反转所有,我们得到(ArBr)r=[3,4,5,6,7,1,2]
下面是实现上述方法的代码:
输出:
时间复杂度: O(N),其中N表示给定数组的大小。
辅助空间: O(1),不需要额外的空间,因此是一个常数。