数组转置

首尾交换  

思路一:开辟一个等长的数组,原始数组反转存入

public static int[] reverse(int arr[])

{

  {

    int temp = new int[arr.length];

    int foot = 0;

    for(int x=arr.length - 1; x>=0; x--)

    {

      temp[foot++]= arr[x];

    }

  return temp;

  }

}

最大问题在于此类方法开辟了两块堆内存空间   空间浪费    内存占用量高  查sql语句    cpu高  查算法

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

原始数组  1 2 3 4 5 6 7 8 9

第一次  1和9交换

第二次 2和8交换

第三次 3和7交换

第四次 4和6交换 5不做任何改变    共转了数组长度/2次

public static void reverse (int arr[])

{

  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 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;

      }

    }

  }

}

 

posted @ 2017-08-31 19:50  竹之轩  阅读(707)  评论(0编辑  收藏  举报