算法一:用一个辅助数组来承接原数组的值。
原数组从末尾开始输出,直到第一位。
时间复杂度O(n)
public int[ ] reverse(int[ ]a){
int[ ]n=new int[a.length];
int k=0;
for(int i=a.length-1;i>=0;i--){
n[k++]=a[i];
}
return n;
}
算法二:对数组进行两边替换。
从数组起始位置i到末尾位置j,依次进行对话,并保证i<j。
时间复杂度O(n/2)
public class Reverse {
public static int[] reverse(int[] a){
int i=0;
int j=a.length-1;
while(i<j){
swap(a,i,j);
i++;
j--;
}
return a;
}
public static void swap(int[]a,int i,int j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public static void main(String[] args) {
int[] a=new int[]{1,2,3,3,7,4,6,9};
int[] n=reverse(a);
for(int i=0;i<n.length;i++){
System.out.print(n[i]+" ");
}
}
}
算法三:数学公式。时间复杂度O(n/2)
当数组长度nl为奇数时,我们能发现一个规律
1 | 5 | 8 | 7 | 6 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
nl/2=5/2=2;对应的数组是8,所以是中位数。
当数组长度nl为偶数时,我们能发现一个规律
1 | 5 | 8 | 7 | 6 | 9 |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
nl/2=6/2=3;对应的数组是7,所以是中位数。
所以不管是奇数还是偶数,我们只需对换该中位数前面的数即可。奇数中间的数保持不变。偶数完全对换。
public static int[] reverse(int[] a){
int i;
for(i=0;i<a.length/2;i++){
int temp=a[i];
a[i]=a[a.length-1-i];
a[a.length-1-i]=temp;
}
return a;
}