三次翻转解决串逆序

【左神】

【问题描述】

假设串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]+",");
			}
	}
}

运行结果(复制粘贴就可以运行)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值