数组转置

所谓的转置最简单的理解就死首尾交换。如果要想实现这样的交换有两种思路

思路一:开辟一个新的等长数组,而后将原数组倒序保存进去。

public class ArrayReverse {

public static void main(String args[]) {
	int temp[]=new int[] {1,2,3,4,5,6,7,8,9};
	temp=reverse(temp);
	printArray(temp); 
}
public static int[] reverse(int arr[]) {
	int data[]=new int[arr.length];
	int foot=0;
	for(int x=arr.length-1;x>=0;foot++){
		data[foot]=arr[x--];
		
	}
	return data;
}	
public static void printArray(int arr[]) {
	for(int x=0;x<arr.length;x++) {
		System.out.print(arr[x]+"、");
	}
}	
}

使用此类模式实现的最大问题在于开辟了两块相同的堆内存空间,所以造成空间浪费(时间复杂度高 空间占内存时间占CPU)

思路二:在一个数组上完成 

置换次数等于数组长度除2,无论奇偶

public static void main(String args[]) {
	int temp[]=new int[] {1,2,3,4,5,6,7,8,9};
	reverse(temp);
	printArray(temp); 
}
public static void reverse(int arr[]) {
	
	//转置的次数等于数组长度除2,无论奇偶
	int center=arr.length/2;
	int head=0;
	int tail=arr.length-1; 
	for(int x=0;x<center;x++){
	int temp=arr[head];
	arr[head]=arr[tail];
	arr[tail]=temp;
	head++;
	tail--;	
	}	
}	
public static void printArray(int arr[]) {
	for(int x=0;x<arr.length;x++) {
		System.out.print(arr[x]+"、");
	}
}
尝试二维数组的转置,肯定有一个前提:行列要相等。

下图我们会发现中间轴并没有动(x==y),互换的都是(x,y)和(y,x)两者互换


public static void main(String args[]) {
	int[][] temp=new int[][] {{1,2,3},{4,5,6},{7,8,9}};
	reverse(temp);
	printArray(temp); 
}
public static void reverse(int arr[][]) {
	for(int x=0;x<arr.length;x++) {
         for(int y=x;y<arr[x].length;y++) {
              if(x!=y) {
                        int temp=arr[x][y];
                        arr[x][y]=arr[y][x];
                        arr[y][x]=temp;
}}}}
public static void printArray(int[][] temp) {
	for(int x=0;x<temp.length;x++) {
		for(int y=0;y<temp[x].length;y++) {
		System.out.print(temp[x][y]+"、");
	}
		System.out.println();
		}
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值