数组
题目描述
给你一个数组 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
解法
方法一:模拟
我们在 $[0, n)$ 的范围内遍历下标 $i$,每次取出 $\textit{nums}[i]$ 和 $\textit{nums}[i+n]$,并将它们依次放入答案数组中。
遍历结束后,返回答案数组即可。
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 $\textit{nums}$ 的长度。
Python3 Java C++ Go TypeScript Rust C
class Solution :
def shuffle ( self , nums : List [ int ], n : int ) -> List [ int ]:
return [ x for pair in zip ( nums [: n ], nums [ n :]) for x in pair ]
class Solution {
public int [] shuffle ( int [] nums , int n ) {
int [] ans = new int [ n << 1 ] ;
for ( int i = 0 , j = 0 ; i < n ; ++ i ) {
ans [ j ++] = nums [ i ] ;
ans [ j ++] = nums [ i + n ] ;
}
return ans ;
}
}
class Solution {
public :
vector < int > shuffle ( vector < int >& nums , int n ) {
vector < int > ans ;
for ( int i = 0 ; i < n ; ++ i ) {
ans . push_back ( nums [ i ]);
ans . push_back ( nums [ i + n ]);
}
return ans ;
}
};
func shuffle ( nums [] int , n int ) ( ans [] int ) {
for i := 0 ; i < n ; i ++ {
ans = append ( ans , nums [ i ])
ans = append ( ans , nums [ i + n ])
}
return
}
function shuffle ( nums : number [], n : number ) : number [] {
const ans : number [] = [];
for ( let i = 0 ; i < n ; ++ i ) {
ans . push ( nums [ i ], nums [ i + n ]);
}
return ans ;
}
impl Solution {
pub fn shuffle ( nums : Vec < i32 > , n : i32 ) -> Vec < i32 > {
let n = n as usize ;
let mut ans = Vec :: new ();
for i in 0 .. n {
ans . push ( nums [ i ]);
ans . push ( nums [ i + n ]);
}
ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12 /**
* Note: The returned array must be malloced, assume caller calls free().
*/
int * shuffle ( int * nums , int numsSize , int n , int * returnSize ) {
int * ans = ( int * ) malloc ( sizeof ( int ) * n * 2 );
for ( int i = 0 ; i < n ; i ++ ) {
ans [ 2 * i ] = nums [ i ];
ans [ 2 * i + 1 ] = nums [ i + n ];
}
* returnSize = n * 2 ;
return ans ;
}