Off-by-one on range boundaries
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.
Build confidence with an intuition-first walkthrough focused on array fundamentals.
Given two arrays of integers nums and index. Your task is to create target array under the following rules:
index[i] the value nums[i] in target array.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 <= 100nums.length == index.length0 <= nums[i] <= 1000 <= index[i] <= iProblem summary: 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.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: Array
[0,1,2,3,4] [0,1,2,2,1]
[1,2,3,4,0] [0,1,2,3,0]
[1] [0]
Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #1389: Create Target Array in the Given Order
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;
}
}
// Accepted solution for LeetCode #1389: Create Target Array in the Given Order
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
}
# Accepted solution for LeetCode #1389: Create Target Array in the Given Order
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
// Accepted solution for LeetCode #1389: Create Target Array in the Given Order
struct Solution;
impl Solution {
fn create_target_array(nums: Vec<i32>, index: Vec<i32>) -> Vec<i32> {
let mut res = vec![];
let n = nums.len();
for i in 0..n {
let e = nums[i];
let j = index[i] as usize;
res.insert(j, e);
}
res
}
}
#[test]
fn test() {
let nums = vec![0, 1, 2, 3, 4];
let index = vec![0, 1, 2, 2, 1];
let res = vec![0, 4, 1, 3, 2];
assert_eq!(Solution::create_target_array(nums, index), res);
let nums = vec![1, 2, 3, 4, 0];
let index = vec![0, 1, 2, 3, 0];
let res = vec![0, 1, 2, 3, 4];
assert_eq!(Solution::create_target_array(nums, index), res);
let nums = vec![1];
let index = vec![0];
let res = vec![1];
assert_eq!(Solution::create_target_array(nums, index), res);
}
// Accepted solution for LeetCode #1389: Create Target Array in the Given Order
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;
}
Use this to step through a reusable interview workflow for this problem.
Two nested loops check every pair or subarray. The outer loop fixes a starting point, the inner loop extends or searches. For n elements this gives up to n²/2 operations. No extra space, but the quadratic time is prohibitive for large inputs.
Most array problems have an O(n²) brute force (nested loops) and an O(n) optimal (single pass with clever state tracking). The key is identifying what information to maintain as you scan: a running max, a prefix sum, a hash map of seen values, or two pointers.
Review these before coding to avoid predictable interview regressions.
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.