数组串联

46 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

题目描述

给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:
ans[i] == nums[i]
ans[i + n] == nums[i]
具体而言,ans 由两个 nums 数组 串联 形成。
返回数组 ans 。
来源:力扣(LeetCode)

  • 示例 1
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]
  • 示例 2
输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
- ans = [1,3,2,1,1,3,2,1]

提示:

  • n == nums.length
  • 1 <= n <= 1000
  • 1 <= nums[i] <= 1000

思路分析

据题意可知,题目会给出一个长度为 n 的整数数组 nums,我们需要根据规则将这个数组变成一个长度为2n的数组ans,规则如下:ans[i] == nums[i] 、ans[i + n] == nums[i],其实从字面上看起来就是直接将数组分成两个数组,然后直接拼接起来,这是一种做法。
也可以使用规则里面的那种做法,就是第i个和第n+i个是同一个相等的,只要给赋相同的值就可以。首先声明一个数组res,根据长度填充 2*n 个0元素,循环原数组,根据规则给新数组res赋值,第i个和第n+i个值是一样的,所以可以在同个循环项中赋同一个值;直至循环结束,最后的res将会是由两个 nums 数组 串联 形成的数组。这道题是很简单的一到算法题了。

AC代码

function solution(nums) {
    let res = new Array(2*nums.length).fill(0);
    for(let i=0; i<nums.length; i++) {
        res[i] = nums[i]   
        res[i + nums.length] = nums[i] 
    }
    console.log(res);
}
let nums = [1,3,2,1];
solution(nums)