三次翻转解决串逆序

来源:互联网 发布:公网ip如何绑定域名 编辑:程序博客网 时间:2024/05/18 22:54

【左神】

【问题描述】

假设串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]+",");}}}
运行结果(复制粘贴就可以运行)


原创粉丝点击