问题描述
问题: 将数组[1,2,3,4,5,6,7,8,9]
反转为[9,8,7,6,5,4,3,2,1]
实现思路: 数组对称位置的元素互换。
方案1:通过中间变量交换元素位置
思路:首尾对应位置的元素交换。
- 确定交换几次(次数 = 数组.length / 2)
- 谁和谁交换(首尾对称位置)
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8};
for (int i = 0; i < arr.length / 2; i ) {
// 定义一个中间变量赋值,分析第一次循环赋值情况
int temp = arr[i];//0
arr[i]=arr[arr.length-1-i];//arr[0]=8
// 交换值的位置
arr[arr.length-1-i] = temp;//arr[7]=0
}
//输出: 9,8,7,6,5,4,3,2,1
}
方案2:新建数组 首尾交换赋值
思路: 创建一个新数组,将原数组尾部的值赋值给新数组首部,再将新数组复制到原数组
代码语言:javascript复制public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8};
// 方案2:新建数组 首尾交换赋值
int[] arr2 = new int[arr.length];
for (int i = arr33.length - 1; i >= 0 ; i--) {
// 将arr的尾项赋值给arr2的首项
arr2[arr.length-1-i] = arr33[i];
// 再将新数组指针指向原数组,arr2会被垃圾回收器回收
arr = arr2;
//输出:9,8,7,6,5,4,3,2,1
}
}
方案3:新建数组 首索引、尾索引。
思路: 初始化条件可以有多个变量
代码语言:javascript复制public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8};
int[] arr2 = new int[arr.length];
// 初始化条件可以有多个,用作首索引,和尾索引
for (int i = arr.length, j=0; j < arr.length; i--, j ) {
// 循环初始化条件创建两个变量,为两个索引的值
arr2[j] = i;
}
//再将新数组指针指向原数组,arr2会被垃圾回收器回收
arr = arr2;
//输出:9,8,7,6,5,4,3,2,1
}