Array Traversal Patterns in DSA Go - Time & Space Complexity
When we look at array traversal, we want to know how the time to complete the task changes as the array gets bigger.
We ask: How many steps does it take to visit every item in the array?
Analyze the time complexity of the following code snippet.
func traverseArray(arr []int) {
for i := 0; i < len(arr); i++ {
// Process each element
_ = arr[i]
}
}
This code goes through each element of the array one by one and does a simple action.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Accessing each element of the array once.
- How many times: Exactly once for each element, so as many times as the array length.
As the array gets bigger, the number of steps grows directly with its size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 steps |
| 100 | 100 steps |
| 1000 | 1000 steps |
Pattern observation: Doubling the array size doubles the work needed.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the number of elements.
[X] Wrong: "Since the loop is simple, it must be constant time O(1)."
[OK] Correct: Even a simple loop that touches every element grows with the array size, so it is not constant time.
Understanding how loops over arrays scale is a key skill. It helps you explain your code clearly and choose the right approach in real problems.
"What if we nested another loop inside to compare each element with every other? How would the time complexity change?"
Practice
for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) }Solution
Step 1: Understand the loop structure
The loop starts at index 0 and runs while i is less than the length of the array, increasing i by 1 each time.Step 2: Analyze the print statement inside the loop
Each iteration prints the element at index i, so all elements from start to end are printed in order.Final Answer:
Prints each element of the array from start to end -> Option AQuick Check:
Loop from 0 to len(arr)-1 prints all elements [OK]
- Thinking it prints in reverse order
- Assuming it prints only one element
- Confusing loop condition causing error
arr using a range-based for loop in Go?Solution
Step 1: Recall Go's range syntax
Go usesfor index, value := range arrto iterate over arrays or slices.Step 2: Check each option
for index, value := range arr { fmt.Println(index, value) } matches the correct syntax. for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } is valid but not range-based. Options C and D are invalid Go syntax.Final Answer:
for index, value := range arr { fmt.Println(index, value) } -> Option CQuick Check:
Range loop syntax = for index, value := range arr { fmt.Println(index, value) } [OK]
- Using Python or other language syntax
- Confusing traditional for loop with range loop
- Using invalid keywords like foreach
arr := []int{10, 20, 30, 40}
for i := len(arr) - 1; i >= 0; i-- {
fmt.Print(arr[i], " ")
}Solution
Step 1: Understand the loop range
The loop starts at index len(arr)-1 (3) and decrements i until it reaches 0.Step 2: Trace the printed values
Indexes printed: 3, 2, 1, 0 corresponding to values 40, 30, 20, 10 printed with spaces.Final Answer:
40 30 20 10 -> Option BQuick Check:
Reverse loop prints elements backward [OK]
- Assuming forward order output
- Off-by-one errors causing runtime error
- Confusing loop condition direction
arr:for i := 0; i <= len(arr); i++ {
fmt.Println(arr[i])
}Solution
Step 1: Analyze the loop condition
The loop runs while i <= len(arr), which means i can equal len(arr), an invalid index.Step 2: Understand array indexing
Array indexes go from 0 to len(arr)-1. Accessing arr[len(arr)] causes runtime error.Final Answer:
The loop condition should be i < len(arr) to avoid index out of range -> Option DQuick Check:
Index must be less than length, not less or equal [OK]
- Using <= instead of < in loop condition
- Starting loop at 1 instead of 0
- Ignoring array declaration errors
arr := []int{1, 2, 3, 4, 5}, which code snippet correctly prints only the elements at even indexes (0, 2, 4)?Solution
Step 1: Understand the requirement
We want to print elements at even indexes: 0, 2, 4.Step 2: Check each option
for i := 0; i < len(arr); i += 2 { fmt.Print(arr[i], " ") } increments i by 2 starting at 0, correctly accessing even indexes. for i := 1; i < len(arr); i += 2 { fmt.Print(arr[i], " ") } accesses odd indexes. for _, v := range arr { if v%2 == 0 { fmt.Print(v, " ") } } prints even values, not indexes. for i := len(arr)-1; i >= 0; i-- { if i%2 == 1 { fmt.Print(arr[i], " ") } } prints odd indexes in reverse.Final Answer:
for i := 0; i < len(arr); i += 2 { fmt.Print(arr[i], " ") } -> Option AQuick Check:
Increment by 2 from 0 prints even indexes [OK]
- Confusing even indexes with even values
- Starting loop at 1 instead of 0
- Using incorrect loop increments
Ready to prove it?
Pass the test and this pattern moves unknown
