Array Deletion at Middle Index in DSA Go - Time & Space Complexity
We want to understand how long it takes to remove an element from the middle of an array.
How does the work grow as the array gets bigger?
Analyze the time complexity of the following code snippet.
package main
import "fmt"
func deleteMiddle(arr []int, index int) []int {
for i := index; i < len(arr)-1; i++ {
arr[i] = arr[i+1]
}
return arr[:len(arr)-1]
}
func main() {
arr := []int{1, 2, 3, 4, 5}
arr = deleteMiddle(arr, 2) // delete element at index 2
fmt.Println(arr)
}
This code removes the element at the given middle index by shifting all elements after it one step left.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that shifts elements left starting from the deletion index.
- How many times: It runs from the deletion index to the end of the array minus one, roughly n - index - 1 times.
As the array size grows, the number of shifts grows roughly with the size of the array.
| Input Size (n) | Approx. Operations (shifts) |
|---|---|
| 10 | About 5 (if deleting near middle) |
| 100 | About 50 |
| 1000 | About 500 |
Pattern observation: The number of operations grows roughly linearly with the array size.
Time Complexity: O(n)
This means the time to delete grows in a straight line as the array gets bigger.
[X] Wrong: "Deleting an element from the middle of an array is very fast, like O(1)."
[OK] Correct: Because after deletion, all elements after the deleted spot must move left, which takes time proportional to the number of elements shifted.
Understanding this helps you explain why arrays are fast for access but slower for middle deletions, a key insight in many coding problems.
"What if we used a linked list instead of an array? How would the time complexity of deleting a middle element change?"
Practice
Solution
Step 1: Understand array deletion
Deleting an element removes it and shifts later elements left.Step 2: Effect on array size
Removing one element reduces the array length by one.Final Answer:
The middle element is removed and the array size decreases by one. -> Option BQuick Check:
Delete middle element = size - 1 [OK]
- Thinking array size stays the same after deletion
- Assuming deletion replaces element with zero
- Confusing middle deletion with first element deletion
arr with odd length?Solution
Step 1: Identify correct slicing syntax
In Go, to delete an element at index i, use append(arr[:i], arr[i+1:]...).Step 2: Apply to middle index
Middle index is len(arr)/2 for odd length, so arr = append(arr[:len(arr)/2], arr[len(arr)/2+1:]...).Final Answer:
arr = append(arr[:len(arr)/2], arr[len(arr)/2+1:]...) -> Option CQuick Check:
Use append with slices excluding middle [OK]
- Using + operator to join slices (invalid in Go)
- Not using ... to expand second slice in append
- Deleting wrong index or slice ranges
arr := []int{10, 20, 30, 40, 50}
mid := len(arr) / 2
arr = append(arr[:mid], arr[mid+1:]...)
fmt.Println(arr)Solution
Step 1: Calculate middle index
len(arr) = 5, so mid = 5 / 2 = 2 (integer division).Step 2: Delete element at index 2
Element at index 2 is 30. After deletion, arr = [10, 20] + [40, 50] = [10 20 40 50].Final Answer:
[10 20 40 50] -> Option AQuick Check:
Removed 30 at index 2 [OK]
- Using float division instead of integer
- Deleting wrong index element
- Not expanding slice with ... in append
arr:
arr := []int{1, 2, 3, 4, 5}
mid := len(arr) / 2
arr = append(arr[:mid], arr[mid:]...)
fmt.Println(arr)Solution
Step 1: Check slice ranges in append
The code uses arr[mid:] which includes the middle element again, not deleting it.Step 2: Correct slice to exclude middle element
To delete middle element at mid, use arr[mid+1:] to skip it.Final Answer:
The second slice should start from mid+1, not mid. -> Option AQuick Check:
Exclude middle element by slicing from mid+1 [OK]
- Using arr[mid:] includes middle element again
- Miscalculating middle index for odd length
- Thinking append can't join slices
arr := []int{5, 10, 15, 20, 25, 30, 35}, write the Go code to delete the middle element and then insert 100 at the same middle index. What will be the final array?Solution
Step 1: Delete middle element
Length is 7, middle index = 7/2 = 3. Delete element at index 3 (value 20): arr = append(arr[:3], arr[4:]...) = [5 10 15 25 30 35].Step 2: Insert 100 at middle index
Insert 100 at index 3: arr = append(arr[:3], append([]int{100}, arr[3:]...)...) = [5 10 15 100 25 30 35].Step 3: Verify final array
Final array is [5 10 15 100 25 30 35].Final Answer:
[5 10 15 100 25 30 35] -> Option DQuick Check:
Delete middle, insert 100 at same index [OK]
- Not updating array after deletion before insertion
- Inserting 100 at wrong index
- Appending 100 at end instead of middle
Ready to prove it?
Pass the test and this pattern moves unknown
