按既定顺序创建目标数组

62 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 34 天,点击查看活动详情

问题描述

给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:

  • 目标数组 target 最初为空。
  • 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。
  • 重复上一步,直到在 nums 和 index 中都没有要读取的元素。

请你返回目标数组。

题目保证数字插入位置总是存在。

示例 1:

输入: nums = [0,1,2,3,4], index = [0,1,2,2,1]
输出: [0,4,1,3,2]
解释:
nums       index     target
0            0        [0]
1            1        [0,1]
2            2        [0,1,2]
3            2        [0,1,3,2]
4            1        [0,4,1,3,2]

示例 2:

输入: nums = [1,2,3,4,0], index = [0,1,2,3,0]
输出: [0,1,2,3,4]
解释:
nums       index     target
1            0        [1]
2            1        [1,2]
3            2        [1,2,3]
4            3        [1,2,3,4]
0            0        [0,1,2,3,4]

示例 3:

输入: nums = [1], index = [0]
输出: [1]

提示:

  • 1 <= nums.length, index.length <= 100
  • nums.length == index.length
  • 0 <= nums[i] <= 100
  • 0 <= index[i] <= i

思路分析

首先我们要先理解一下题目的意思,题目会给我们两个数组nums 和 indexnums记录了我们需要插入结果数组的元素,index记录nums中每个元素需要插入的位置,我们需要按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。

如:nums = [0,1,2,3,4], index = [0,1,2,2,1]

我们从左往右遍历,原始的target数组为空:[];

  • 遍历到第一个元素时,我们需要在下标为0处插入元素0,此时target为[0]
  • 遍历到第二个元素时,我们需要在下标为1处插入元素1,此时target为[0,1]
  • 遍历到第三个元素时,我们需要在下标为2处插入元素2,此时target为[0,1,2]
  • 遍历到第四个元素时,我们需要在下标为2处插入元素3,此时target为[0,1,3,2]
  • 遍历到第五个元素时,我们需要在下标为1处插入元素4,此时target为[0,4,1,3,2]

我们可以简单的进行模拟,使用数组的splice方法即可模拟题目的插入方式,array.splice(index,0,insertValue),第一个参数(插入位置),第二个参数(0),第三个参数(插入的项)。

AC 代码

完整代码如下:

/**
 * @param {number[]} nums
 * @param {number[]} index
 * @return {number[]}
 */
var createTargetArray = function(nums, index) {
    const res = [];
    for(let i = 0; i < nums.length; i++){
        res.splice(index[i],0,nums[i]);
    }
    return res;
};

说在后面

本人为算法业余爱好者,平时只是随着兴趣偶尔刷刷题,如果上面分享有错误的地方,欢迎指出,感激不尽。