按既定顺序创建目标数组
难度:
标签:
题目描述
代码结果
运行时间: 25 ms, 内存: 16.0 MB
/*
* 思路:
* 1. 使用 IntStream.range() 创建索引流,然后对其进行 map 操作。
* 2. 在 map 操作中,根据 index[i] 插入 nums[i] 到目标列表中。
* 3. 最后将目标列表转换为数组并返回。
*/
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
public class Solution {
public int[] createTargetArray(int[] nums, int[] index) {
List<Integer> target = new ArrayList<>();
IntStream.range(0, nums.length).forEach(i -> target.add(index[i], nums[i]));
return target.stream().mapToInt(Integer::intValue).toArray();
}
}
解释
方法:
在这个题解中,我们首先创建了一个和nums等长的列表dp,初始化为全0。接着,我们遍历nums和index数组,使用Python列表的insert方法在每次迭代中将nums[i]插入到dp列表的index[i]位置。由于insert操作会导致后续元素移动,因此实际上dp列表在插入过程中长度会不断增加。最终,我们通过dp[:len(nums)]获取长度与nums相同的目标数组。这种方法直接利用了列表的动态插入特性,简化了插入的复杂度处理,但仍会涉及到元素的移动开销。
时间复杂度:
O(n^2)
空间复杂度:
O(n)
代码细节讲解
🦆
为什么在题解中初始化目标数组dp为与nums长度相同的全0列表,然后再使用insert操作?
▷🦆
在使用insert方法插入元素时,对现有元素的移动是如何影响整体性能的?
▷🦆
题解中提到最终通过dp[:len(nums)]获取目标数组,为何需要这一步骤,直接使用dp数组是否可行?
▷🦆
插入操作中如果index数组具有多个相同的值,对结果数组的最终形态有何影响?
▷