1389. 按既定顺序创建目标数组

题目

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

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

请你返回目标数组。

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

示例1:

1
2
3
4
5
6
7
8
9
输入: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:

1
2
3
4
5
6
7
8
9
输入: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:

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

提示:

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

解法

解法一:

利用ArrayList的add(int index, int value)方法,即可实现在对应位置上插入对应的值

JAVA

1
2
3
4
5
6
7
public int[] createTargetArray(int[] nums, int[] index) {
ArrayList<Integer> result = new ArrayList<>();
for (int i = 0;i < nums.length;i++) {
result.add(index[i], nums[i]);
}
return result.stream().mapToInt(a -> a).toArray();
}

解法二:

ArrayList每次在指定位置上插入对应的数据之后,其后面的数据还要整体往后挪动,效率不高,可以考虑用LinkedList替换,它插入只是指针操作,可以在O(1)的时间内完成。

Java

1
2
3
4
5
6
7
public int[] createTargetArray(int[] nums, int[] index) {
LinkedList<Integer> result = new LinkedList<>();
for (int i = 0;i < nums.length;i++) {
result.add(index[i], nums[i]);
}
return result.stream().mapToInt(a -> a).toArray();
}
0%