【左神】
【问题描述】
假设串s,给定下标k,将s分为子串L,P.使原本LP的串变为PL,在不使用辅助数组的情况下。
例:S[10]={1,2,3,4,5,6,7,8,9,10} 给定K值为6,再改变后的S串为S[10]={7,8,9,10,1,2,3,4,5,6}
【问题分析】
题目要求不使用辅助数组,如果要使用辅助数组的话问题很容易解决,只需要把原本的数组根据要求复制到新的数组中,但在不使用辅助数组的情况下,我们只能在原本的数组上修改,在这里我们使用3次翻转。首先将L串逆序,再将P串逆序,再将整体逆序。逆序的方法为两两交换。
[JAVA代码] 我也不知道的代码是否符合要求(时间空间复杂度)
public class Array {
public static void main(String args[]) {
int [] args_= {0,1,2,3,4,5,6,7,8,9};
Array a = new Array();
a.array_three(args_, 6, 10); //6为要转换的中间点 10为数组的长度。
}
public void array_three(int[] args_,int k,int p) {
//k点之前进行逆序
for(int i=0;i<k/2;i++){
int temp; //做中间变量
temp=args_[i];
args_[i]=args_[k-1-i];
args_[k-1-i]=temp;
}
//k点之后进行逆序
for(int i=0;i<(p-k)/2;i++) {//后面一段
int temp; //做中间变量
temp=args_[i+k];
args_[i+k]=args_[p-1-i];
args_[p-1-i]=temp;
}
//整个逆序
for(int i=p-1;i>=0;i--) {
System.out.print(" "+args_[i]+",");
}
}
}
运行结果(复制粘贴就可以运行)