Modifying arrays in Javascript - Time & Space Complexity
When we change items in an array, the time it takes can grow as the array gets bigger.
We want to know how the work needed changes when we add or remove items.
Analyze the time complexity of the following code snippet.
const arr = [1, 2, 3, 4, 5];
// Add an item at the end
arr.push(6);
// Remove the first item
arr.shift();
// Insert an item at index 2
arr.splice(2, 0, 10);
This code adds, removes, and inserts items in an array at different positions.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Moving elements to make space or close gaps when inserting or removing.
- How many times: Depends on how many elements need to shift after the change.
When adding at the end, work stays about the same no matter the size.
When removing or inserting near the start, many elements must move, so work grows with array size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Few to 10 moves |
| 100 | Few to 100 moves |
| 1000 | Few to 1000 moves |
Pattern observation: Inserting or removing at the start or middle means more moves as array grows; adding at the end stays quick.
Time Complexity: O(n)
This means the time to insert or remove items can grow directly with the number of elements in the array.
[X] Wrong: "Adding or removing items anywhere in an array always takes the same time."
[OK] Correct: Removing or inserting at the start or middle requires shifting many elements, so it takes longer as the array grows.
Understanding how array changes affect time helps you explain your code choices clearly and shows you know how data structures work behind the scenes.
"What if we used a linked list instead of an array? How would the time complexity for inserting or removing items change?"
Practice
Solution
Step 1: Understand array methods for adding elements
push()adds elements to the end,unshift()adds to the start.Step 2: Identify the method that adds to the end
push()is the method that adds elements at the end of the array.Final Answer:
push() -> Option AQuick Check:
Adding at end = push() [OK]
- Confusing push() with pop()
- Using shift() to add elements
- Thinking unshift() adds at end
arr?Solution
Step 1: Recall methods that remove elements
pop()removes from end,shift()removes from start.Step 2: Identify method to remove first element
shift()removes the first element of the array.Final Answer:
arr.shift() -> Option BQuick Check:
Remove first element = shift() [OK]
- Using pop() to remove first element
- Using unshift() which adds elements
- Confusing push() with removal methods
let arr = [1, 2, 3, 4]; arr.splice(1, 2, 8, 9); console.log(arr);
Solution
Step 1: Understand splice parameters
splice(1, 2, 8, 9)means start at index 1, remove 2 elements, then insert 8 and 9.Step 2: Apply splice on array
Original array: [1, 2, 3, 4]. Remove elements at index 1 and 2 (2 and 3), then insert 8 and 9 at index 1. Result: [1, 8, 9, 4].Final Answer:
[1, 8, 9, 4] -> Option AQuick Check:
splice removes and inserts = [1, 8, 9, 4] [OK]
- Confusing splice with slice
- Not removing correct elements
- Forgetting splice inserts new items
let arr = [1, 2, 3, 4]; arr.splice(3, 1); console.log(arr);
Solution
Step 1: Identify the element to remove and its index
The element '3' is at index 2 in the array [1, 2, 3, 4].Step 2: Check the splice call
The code callsarr.splice(3, 1), which removes the element at index 3 (which is 4), not 3.Final Answer:
The index 3 removes the wrong element, should be 2 -> Option CQuick Check:
Remove '3' at index 2, not 3 [OK]
- Using wrong index for splice
- Confusing pop() with splice()
- Thinking splice can't remove elements
arr = [5, 10, 15, 20]. You want to replace the middle two elements with 12 and 18 using a single method call. Which code correctly does this?Solution
Step 1: Identify indexes of middle two elements
Array is [5, 10, 15, 20]. Middle two elements are at indexes 1 and 2 (10 and 15).Step 2: Use splice to replace these elements
Callarr.splice(1, 2, 12, 18)to start at index 1, remove 2 elements, and insert 12 and 18.Final Answer:
arr.splice(1, 2, 12, 18); -> Option DQuick Check:
Replace middle two with splice(1,2,12,18) [OK]
- Wrong start index
- Removing too few or too many elements
- Using splice with wrong parameters
Ready to prove it?
Pass the test and this pattern moves unknown
