Easy

题目描述

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

解题思路

这道题是一个典型的数组插入模拟题,核心思路是按照题目描述的规则逐步构建目标数组。

解题思路

题目要求我们根据给定的数值数组和索引数组,按顺序在指定位置插入元素来构建目标数组。关键在于理解插入操作的含义:在指定位置插入元素时,该位置及其后面的所有元素都会向右移动一位。

算法步骤

  1. 创建一个空的目标数组 target
  2. 遍历 nums 和 index 数组,对于每一对 (nums[i], index[i]):
    • 在 target 数组的 index[i] 位置插入 nums[i]
    • 原来在 index[i] 及之后位置的元素自动后移

大多数编程语言都提供了数组或列表的插入方法,可以直接使用。这种方法虽然时间复杂度较高,但由于题目约束数组长度最多为100,性能完全可以接受。

推荐解法:直接使用语言内置的插入方法进行模拟,代码简洁易懂。

代码实现

class Solution {
public:
    vector<int> createTargetArray(vector<int>& nums, vector<int>& index) {
        vector<int> target;
        for (int i = 0; i < nums.size(); i++) {
            target.insert(target.begin() + index[i], nums[i]);
        }
        return target;
    }
};
class Solution:
    def createTargetArray(self, nums: List[int], index: List[int]) -> List[int]:
        target = []
        for i in range(len(nums)):
            target.insert(index[i], nums[i])
        return target
public class Solution {
    public int[] CreateTargetArray(int[] nums, int[] index) {
        List<int> target = new List<int>();
        for (int i = 0; i < nums.Length; i++) {
            target.Insert(index[i], nums[i]);
        }
        return target.ToArray();
    }
}
var createTargetArray = function(nums, index) {
    let target = [];
    for (let i = 0; i < nums.length; i++) {
        target.splice(index[i], 0, nums[i]);
    }
    return target;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n²)每次插入操作需要移动后续元素,最坏情况下每次移动O(n)个元素
空间复杂度O(n)需要额外的目标数组存储结果