2020-09-04

tech2025-09-12  107

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

每日学习一个算法——重新排列数组(本人菜鸟,自己学习)

题目一、解题思路二、更新代码 1.第一遍2.第二遍总结

 


题目

给你一个数组 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。

拥有一个清晰的头脑很重要,最开始自己在纸上演算,非要不建立新数组,最后把自己干懵逼。

最新回复(0)