提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目
给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。
请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。
示例 1:
输入:nums = [2,5,1,3,4,7], n = 3
输出:[2,3,5,4,1,7]
解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]
示例 2:
输入:nums = [1,2,3,4,4,3,2,1], n = 4
输出:[1,4,2,3,3,2,4,1]
示例 3:
输入:nums = [1,1,2,2], n = 2
输出:[1,2,1,2]
提示:
1 <= n <= 500
nums.length == 2n
1 <= nums[i] <= 10^3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shuffle-the-array
提示:以下是本篇文章正文内容,下面案例可供参考
一、解题思路
首先,个人感觉,这个题目,在不建立一个新的数组的情况啊,是比较复杂和难的,因为这种情况下,要设置中间变量,元素位置还不能变,即使设置中间变量,还要思考中间变量应该放到哪个位置,还要找这个规律,而且第n个元素之后的元素,取一个就少一个,位置就空一个,也就说明中间变量就要多一个,个人认为行不通(也许大佬有好的方法,望批评指正)。
所以就直接考虑设置一个新的数组,新的数组sum的偶数位就是原数组num前n个元素依次排序,sum的奇数位就是num的后n个元素依次排序。
二、代码实现
1.第一遍
package SuanFa02;
import java.util.Scanner;
public class ShuZuPaiXu {
public static void main(String[] args) {
//以下内容与往常一样,字符串输入,转整型数组
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个数组,位数是偶数,中间以空格分隔");
String[] str = scan.nextLine().split( " ");//输入一串字符串(这里是单个数字),以空格分隔
int[] sum = new int[str.length];
for (int i = 0; i < str.length; i++) {
sum[i]=Integer.parseInt(str[i]);//将字符串的每个元素转换到整形数组的每个元素
}
int n = str.length/2;//字符长度的一半即是n
Println(PaiXu(sum, n));//调用打印方法、排序方法
}
public static int[] PaiXu(int[] num,int n){
int[] sum = new int[2*n];
int a = 0;
for (int i = 0; a < n; i++) {//num数组的前n个数,放入sum数组的偶数位
if(i%2==0){
sum[i]=num[a++];
}
}
int b = 0;
for (int i = 0; b < n; i++) {//num数组的后n个数,放入sum数组的偶数位
if(i%2==1){
sum[i]=num[n+b++];
}
}
return sum;
}
public static void Println(int[] sum){//打印新生成的数组
System.out.print("[");
for (int i = 0; i < sum.length; i++) {
System.out.print(sum[i]+",");
}
System.out.print("]");
}
}
2.第二遍
public static int[] PaiXu(int[] num,int n){//其他部分的代码与第一遍是一样的,不再写了
int[] sum = new int[2*n];//定义一个新数组,长度为2n
for (int i = 0; i < n; i++) {
sum[i*2] = num[i];//num的前n个数,依次放入sum的偶数位
sum[i*2+1] = num[n+i];//num的后n个数,依次放入sum的奇数位
}
return sum;
}
总结
今天只写两遍,因为看了其他的代码,也没有更简单的了,再简单就是python什么的,我只写Java。
拥有一个清晰的头脑很重要,最开始自己在纸上演算,非要不建立新数组,最后把自己干懵逼。