Array Insertion at End in DSA Go - Time & Space Complexity
We want to understand how long it takes to add an item at the end of an array.
How does the time needed change as the array grows bigger?
Analyze the time complexity of the following code snippet.
package main
import "fmt"
func insertAtEnd(arr []int, val int) []int {
arr = append(arr, val)
return arr
}
func main() {
arr := []int{1, 2, 3}
arr = insertAtEnd(arr, 4)
fmt.Println(arr)
}
This code adds a new value at the end of an integer array using Go's append function.
- Primary operation: Adding one element at the end of the array.
- How many times: Once per insertion.
Adding one element usually takes the same short time, but sometimes it takes longer if the array needs more space.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 1 operation |
| 100 | About 1 operation |
| 1000 | About 1 operation |
Pattern observation: Most insertions are quick, but occasionally the array grows and copying happens, making that insertion slower.
Time Complexity: O(1) amortized
This means each insertion usually takes the same small amount of time, but sometimes it takes longer when the array grows.
[X] Wrong: "Every insertion at the end takes longer as the array grows because it copies all elements each time."
[OK] Correct: The array only copies when it runs out of space, which happens rarely. Most insertions are very fast.
Understanding this helps you explain how dynamic arrays work and why adding at the end is efficient most of the time.
"What if we changed the array to a linked list? How would the time complexity of insertion at the end change?"
Practice
Solution
Step 1: Understand Go array size
Arrays in Go have a fixed size defined at declaration and cannot grow.Step 2: Effect of insertion at end
Since size is fixed, you cannot add new elements beyond the declared size.Final Answer:
You cannot insert because arrays have fixed size -> Option AQuick Check:
Fixed size array = no insertion beyond size [OK]
- Thinking arrays can grow automatically
- Confusing arrays with slices
- Assuming insertion replaces last element
nums in Go?Solution
Step 1: Recall Go slice append syntax
In Go, append returns a new slice with the element added, so assignment is needed.Step 2: Check each option
nums = append(nums, 10) correctly assigns the result of append to nums. Others are invalid syntax or missing assignment.Final Answer:
nums = append(nums, 10) -> Option DQuick Check:
Use append with assignment to add element [OK]
- Not assigning append result back
- Using method call syntax like nums.append()
- Trying to add with + operator
nums := []int{1, 2, 3}
nums = append(nums, 4)
fmt.Println(nums)Solution
Step 1: Understand initial slice and append
nums starts as [1 2 3]. append(nums, 4) adds 4 at the end.Step 2: Print the updated slice
After append, nums becomes [1 2 3 4], which is printed.Final Answer:
[1 2 3 4] -> Option CQuick Check:
Appending 4 adds it at end [OK]
- Expecting original slice without new element
- Thinking append adds at start
- Confusing slice with array syntax
arr := [3]int{1, 2, 3}
arr = append(arr, 5)
fmt.Println(arr)Solution
Step 1: Check type of arr
arr is declared as an array [3]int, which has fixed size and no append method.Step 2: Understand append usage
append works only on slices, not arrays. Using append on array causes error.Final Answer:
Cannot use append on array; append works only on slices -> Option AQuick Check:
append requires slice, not array [OK]
- Trying to append to fixed-size array
- Ignoring difference between array and slice
- Assuming append auto-converts array to slice
data := []int{2, 4, 6}, which code snippet correctly inserts the value 8 at the end and then doubles all elements?Solution
Step 1: Append 8 to slice
data = append(data, 8) adds 8 at the end, making data [2 4 6 8].Step 2: Double each element correctly
Using for i := range data and data[i] *= 2 doubles each element in place.Step 3: Check other options
data = append(data, 8) for _, v := range data { v *= 2 } fmt.Println(data) doubles copy of value, not original slice. Options C and D do wrong math.Final Answer:
data = append(data, 8) for i := range data { data[i] *= 2 } fmt.Println(data) -> Option BQuick Check:
Append then modify elements by index [OK]
- Modifying value copy in range instead of slice element
- Using wrong arithmetic operation
- Not assigning append result back
Ready to prove it?
Pass the test and this pattern moves unknown
