思路分析
解法一:用链表实现,依次执行插入操作。
解法二:模拟动态数组的插入过程,计算出每个数最终的index,然后遍历赋值。相比真正的动态数组插入操作减少了内存分配回收和移动的过程。
代码实现
解法一
class Solution {
public int[] createTargetArray(int[] nums, int[] index) {
LinkedList<Integer> target = new LinkedList<Integer>();
for (int i = 0; i < nums.length; ++i) {
target.add(index[i], nums[i]);
}
int[] ans = new int[nums.length];
for (int i = 0; i < nums.length; ++i) {
ans[i] = target.get(i);
}
return ans;
}
}
解法二
class Solution {
public int[] createTargetArray(int[] nums, int[] index) {
int[] ans = new int[nums.length];
for (int i = 0; i < nums.length; ++i){
for (int j = 0; j < i; ++j){
if (index[i] <= index[j]){
index[j]++;
}
}
}
for (int i = 0; i < nums.length; ++i){
ans[index[i]] = nums[i];
}
return ans;
}
}