Welcome to Subscribe On Youtube

1389. Create Target Array in the Given Order

Description

Given two arrays of integers nums and index. Your task is to create target array under the following rules:

  • Initially target array is empty.
  • From left to right read nums[i] and index[i], insert at index index[i] the value nums[i] in target array.
  • Repeat the previous step until there are no elements to read in nums and index.

Return the target array.

It is guaranteed that the insertion operations will be valid.

 

Example 1:

Input: nums = [0,1,2,3,4], index = [0,1,2,2,1]
Output: [0,4,1,3,2]
Explanation:
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]

Example 2:

Input: nums = [1,2,3,4,0], index = [0,1,2,3,0]
Output: [0,1,2,3,4]
Explanation:
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]

Example 3:

Input: nums = [1], index = [0]
Output: [1]

 

Constraints:

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

Solutions

Solution 1: Simulation

We create a list $target$ to store the target array. Since the problem guarantees that the insertion position always exists, we can directly insert in the given order into the corresponding position.

The time complexity is $O(n^2)$, and the space complexity is $O(n)$. Where $n$ is the length of the array.

  • class Solution {
        public int[] createTargetArray(int[] nums, int[] index) {
            int n = nums.length;
            List<Integer> target = new ArrayList<>();
            for (int i = 0; i < n; ++i) {
                target.add(index[i], nums[i]);
            }
            // return target.stream().mapToInt(i -> i).toArray();
            int[] ans = new int[n];
            for (int i = 0; i < n; ++i) {
                ans[i] = target.get(i);
            }
            return ans;
        }
    }
    
  • 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 x, i in zip(nums, index):
                target.insert(i, x)
            return target
    
    
  • func createTargetArray(nums []int, index []int) []int {
    	target := make([]int, len(nums))
    	for i, x := range nums {
    		copy(target[index[i]+1:], target[index[i]:])
    		target[index[i]] = x
    	}
    	return target
    }
    
  • function createTargetArray(nums: number[], index: number[]): number[] {
        const ans: number[] = [];
        for (let i = 0; i < nums.length; i++) {
            ans.splice(index[i], 0, nums[i]);
        }
        return ans;
    }
    
    

All Problems

All Solutions