题解 | #数组倒转#
数组倒转
https://www.nowcoder.com/practice/3a90caee736a45e1ad70b1d4105dec5f
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int[] arr = new int[6]; Scanner scanner = new Scanner(System.in); for (int i = 0; i < arr.length; i++) { arr[i] = scanner.nextInt(); } System.out.println(Arrays.toString(arr)); //write your code here...... int start = 0,end = arr.length - 1; while(start < end){ arr[start] = (arr[start] + arr[end]) - (arr[end] = arr[start]); start++; end--; } System.out.println(Arrays.toString(arr)); } }
(1)方法一:使用双指针
- 头指针指向第一个元素,尾指针指向最后一个元素
- 头尾进行交换
- 循环结束条件就是:头指针大于等于尾指针的时候结束循环,因为如果头尾指针指向的是同一个元素,该元素不需要交换
(1)方法二:利用数组的下标关系
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int[] arr = new int[6]; Scanner scanner = new Scanner(System.in); for (int i = 0; i < arr.length; i++) { arr[i] = scanner.nextInt(); } System.out.println(Arrays.toString(arr)); //write your code here...... //只需要比较一半 for (int i = 0;i<arr.length / 2;i++){ arr[i] = (arr[i] + arr[arr.length-1-i]) - (arr[arr.length-1-i] = arr[i]); } System.out.println(Arrays.toString(arr)); } }
- 循环条件是比较到元素个数的一半。。
- 数组的下标关系是[i,arr.length-1-i]
- 例如:
- [52, 10, 37, 40, 60, 83],
- 第1轮交换:下标是0,最后一个元素的下标是5,索引为0和5的元素进行交换
- 第2轮交换:下标1,4进行交换
- 第3轮比较,下标2,3进行交换
- 第四轮,下标3,2,上轮已经交换过了,无需再次交换!!
观察索引i,可以发现规律,就是[i,个数-1-i],
i = 0,[0,5] ->[0,5-0]
i = 1,[1,4] ->[1,5-1]
i = 2,[2,3] ->[2,5-2]