题解 | #数组倒转#

数组倒转

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]

全部评论

相关推荐

点赞 评论 收藏
分享
09-09 13:30
四川大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务