给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,…,xn,y1,y2,…,yn] 的格式排列。
请你将数组按 [x1,y1,x2,y2,…,xn,yn] 格式重新排列,返回重排后的数组。
普通解法
用一个新vecotr保存结果,0-n,n-2*n轮流放入。
class Solution {
public:
vector<int> shuffle(vector<int>& nums, int n) {
int mid = n;
vector<int> res = {};
for(int i = 0,j = n;i<n;i++,j++){
res.push_back(nums[i]);
res.push_back(nums[j]);
}
return res;
}
};
时间复杂度O(N),空间复杂度O(N).
另一种解法
0-n放入2i,n-2i放入2i+1位置,
class Solution {
public:
vector<int> shuffle(vector<int>& nums, int n) {
vector<int> tmp = nums;
for (int i = 0; i < n; i++) {
tmp[i * 2] = nums[i];
tmp[i * 2 + 1] = nums[n + i];
}
return tmp;
}
};
欢迎关注公众号,往期内容也很精彩。每周更新面试高频算法题。从思路,代码,时间复杂度等多方面进行分析。
后台点击电子书可以获得:halfrost大神的孔雀书,经典巨著:算法导论。