Leetcode学习 重新排列数组

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

题解(javascript)

/*
  边删边添法
  1. 找到截断的数组后半部分循环
  2. 将循环到的数字依次添到前半部分数组的对应位置(隔一个添)
*/

var shuffle = function(nums, n) {
    let numsLen = nums.length;
    // 记录要添加到数组内的索引
    let index = 1
    while(n < numsLen-1) {
        // 删除的数字
        let delNum = nums[n]
        nums.splice(n,1)
        // 把删除的回填回去
        nums.splice(index,0,delNum)
        index = index + 2
        n++
    }
    return nums
};


/*
  切割数组法
  1.从n起始截取数组,这时原数组与截取后的数组长度相同
  2.新建一个临时数组,以截取后的数组长度循环依次push两个数组内的值
*/
var shuffle = function(nums, n) {
    let arr1 = nums.splice(n);
    let newArr = [];
    for(let i = 0 ; i < nums.length ; i ++ ){
        newArr.push(nums[i]);
        newArr.push(arr1[i]);
    }
    return newArr;
};

leetcode

401 Words

2020-10-28 10:13 +0800