思路分析

解法一:用链表实现,依次执行插入操作。
解法二:模拟动态数组的插入过程,计算出每个数最终的index,然后遍历赋值。相比真正的动态数组插入操作减少了内存分配回收和移动的过程。

代码实现

解法一

  1. class Solution {
  2. public int[] createTargetArray(int[] nums, int[] index) {
  3. LinkedList<Integer> target = new LinkedList<Integer>();
  4. for (int i = 0; i < nums.length; ++i) {
  5. target.add(index[i], nums[i]);
  6. }
  7. int[] ans = new int[nums.length];
  8. for (int i = 0; i < nums.length; ++i) {
  9. ans[i] = target.get(i);
  10. }
  11. return ans;
  12. }
  13. }

解法二

  1. class Solution {
  2. public int[] createTargetArray(int[] nums, int[] index) {
  3. int[] ans = new int[nums.length];
  4. for (int i = 0; i < nums.length; ++i){
  5. for (int j = 0; j < i; ++j){
  6. if (index[i] <= index[j]){
  7. index[j]++;
  8. }
  9. }
  10. }
  11. for (int i = 0; i < nums.length; ++i){
  12. ans[index[i]] = nums[i];
  13. }
  14. return ans;
  15. }
  16. }