Linear Search Algorithm in DSA Go - Time & Space Complexity
We want to understand how the time taken by linear search changes as the list size grows.
How many steps does it take to find an item or decide it's not there?
Analyze the time complexity of the following code snippet.
func linearSearch(arr []int, target int) int {
for i, val := range arr {
if val == target {
return i
}
}
return -1
}
This code looks through each item in the list one by one to find the target value.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each element in the list one by one.
- How many times: Up to n times, where n is the number of items in the list.
As the list gets bigger, the number of checks grows roughly the same as the list size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 checks |
| 100 | Up to 100 checks |
| 1000 | Up to 1000 checks |
Pattern observation: The work grows linearly with the number of items.
Time Complexity: O(n)
This means the time to find the item grows directly with the list size.
[X] Wrong: "Linear search always takes the same time no matter the list size."
[OK] Correct: The search time depends on where the target is or if it is missing, so bigger lists usually take more time.
Understanding linear search time helps you compare it with faster methods and shows you can analyze simple algorithms clearly.
"What if the list was sorted and we used binary search instead? How would the time complexity change?"
Practice
Linear Search Algorithm?Solution
Step 1: Understand linear search process
Linear search checks each element in order, starting from the first, until it finds the target or reaches the end.Step 2: Compare with other search methods
Other methods like binary search divide the list or use extra data structures, but linear search is simple and direct.Final Answer:
Check each element one by one until the target is found or list ends -> Option AQuick Check:
Linear search = check elements one by one [OK]
- Confusing linear search with binary search
- Thinking linear search requires sorted list
- Assuming linear search is faster than binary search always
arr?Solution
Step 1: Identify Go loop syntax for arrays
In Go, the standard for loop to iterate over an array uses: for i := 0; i < len(arr); i++ { ... }Step 2: Check other options for Go correctness
Options B and C use syntax from other languages, and D is correct Go syntax.Final Answer:
for i := 0; i < len(arr); i++ { -> Option DQuick Check:
Go for loop syntax = for i := 0; i < len(arr); i++ { [OK]
- Using Python or JavaScript loop syntax in Go
- Forgetting to initialize loop variable
- Using while loop which is not common in Go
package main
import "fmt"
func main() {
arr := []int{4, 2, 7, 1, 9}
target := 7
index := -1
for i := 0; i < len(arr); i++ {
if arr[i] == target {
index = i
break
}
}
fmt.Println(index)
}Solution
Step 1: Trace the loop to find target 7 in array
Array is [4, 2, 7, 1, 9]. Loop checks elements: index 0=4, 1=2, 2=7 matches target.Step 2: Assign index and break loop
When arr[2] == 7, index is set to 2 and loop breaks, so index remains 2.Final Answer:
2 -> Option CQuick Check:
Target 7 found at index 2 [OK]
- Returning element value instead of index
- Not breaking loop and returning last index
- Confusing index with value
arr := []int{3, 5, 8, 6}
target := 6
index := -1
for i := 0; i <= len(arr); i++ {
if arr[i] == target {
index = i
break
}
}
fmt.Println(index)Solution
Step 1: Check loop boundary condition
The loop uses i <= len(arr), but valid indices are 0 to len(arr)-1. Using <= causes out-of-range error.Step 2: Correct loop condition
Change loop to i < len(arr) to avoid accessing invalid index.Final Answer:
Loop condition should be i < len(arr), not i <= len(arr) -> Option BQuick Check:
Loop index must be less than length [OK]
- Using <= instead of < in loop condition
- Initializing index incorrectly
- Thinking array must be sorted for linear search
["Anna", "Bob", "Clara", "David", "Eva"]. You want to find the position of "David" using linear search in Go. Which code snippet correctly implements this and prints the index or -1 if not found?Solution
Step 1: Check loop and index initialization
names := []string{"Anna", "Bob", "Clara", "David", "Eva"} target := "David" index := -1 for i := 0; i < len(names); i++ { if names[i] == target { index = i break } } fmt.Println(index) initializes index to -1 and loops from 0 to len(names)-1 correctly.Step 2: Verify condition and output
It compares names[i] == target and breaks on match, printing correct zero-based index or -1 if not found.Final Answer:
Option A code correctly implements linear search and prints index or -1 -> Option AQuick Check:
Linear search with correct loop and condition [OK]
- Using wrong loop bounds causing runtime error
- Setting index incorrectly on no match
- Adding 1 to index causing off-by-one error
Ready to prove it?
Pass the test and this pattern moves unknown
