Bird
Raised Fist0
DSA Rustprogramming

Linear Search Algorithm in DSA Rust

Choose your learning style10 modes available
Mental Model
Look at each item one by one until you find the one you want or reach the end.
Analogy: Like searching for a book on a shelf by checking each book from left to right until you find the right one.
Array: [3] -> [7] -> [1] -> [9] -> [5] -> null
Index:  0      1      2      3      4
Search for: 9
↑
Dry Run Walkthrough
Input: array: [3, 7, 1, 9, 5], search value: 9
Goal: Find the index of value 9 in the array or say not found
Step 1: Check element at index 0
[3] -> [7] -> [1] -> [9] -> [5] -> null
Index:  0      1      2      3      4
↑
Why: Start from the first element to see if it matches the search value
Step 2: Check element at index 1
[3] -> [7] -> [1] -> [9] -> [5] -> null
Index:  0      1      2      3      4
       ↑
Why: First element was not 9, so move to next element
Step 3: Check element at index 2
[3] -> [7] -> [1] -> [9] -> [5] -> null
Index:  0      1      2      3      4
              ↑
Why: Keep checking next elements until we find 9
Step 4: Check element at index 3
[3] -> [7] -> [1] -> [9] -> [5] -> null
Index:  0      1      2      3      4
                     ↑
Why: Found 9 at index 3, stop searching
Result:
Final state:
[3] -> [7] -> [1] -> [9] -> [5] -> null
Index:  0      1      2      3      4
                     ↑
Answer: Found 9 at index 3
Annotated Code
DSA Rust
fn linear_search(arr: &[i32], target: i32) -> Option<usize> {
    for (index, &value) in arr.iter().enumerate() {
        if value == target {
            return Some(index); // found target, return index
        }
    }
    None // target not found
}

fn main() {
    let array = [3, 7, 1, 9, 5];
    let target = 9;
    match linear_search(&array, target) {
        Some(index) => println!("Found {} at index {}", target, index),
        None => println!("{} not found in array", target),
    }
}
for (index, &value) in arr.iter().enumerate() {
iterate over array elements with their indexes
if value == target {
check if current element matches the target
return Some(index); // found target, return index
stop search and return index when target found
None // target not found
return None if target is not in array
OutputSuccess
Found 9 at index 3
Complexity Analysis
Time: O(n) because in the worst case we check each element once
Space: O(1) because we use only a few variables regardless of input size
vs Alternative: Compared to binary search which is O(log n), linear search is slower but works on unsorted arrays
Edge Cases
empty array
returns None immediately because there are no elements to check
DSA Rust
None // target not found
target is first element
returns index 0 immediately after first check
DSA Rust
return Some(index); // found target, return index
target not in array
checks all elements and returns None at the end
DSA Rust
None // target not found
When to Use This Pattern
When you need to find an item in a list without any order, use linear search because it checks each item one by one.
Common Mistakes
Mistake: Stopping the search too early without checking all elements
Fix: Only stop when the target is found or after checking all elements
Mistake: Returning wrong index or value
Fix: Return the current index when the target matches the element
Summary
Linear search looks at each element in order to find a target value.
Use it when the list is unsorted or small.
The key is to check each element one by one until you find the target or reach the end.

Practice

(1/5)
1. What is the main idea behind the Linear Search Algorithm?
easy
A. Divide the list into halves repeatedly to find the target
B. Use a hash table to find the target instantly
C. Sort the list first then search using binary steps
D. Check each element one by one until the target is found or list ends

Solution

  1. Step 1: Understand linear search process

    Linear search checks each element in order from start to end.
  2. Step 2: Compare with other search methods

    Binary search divides list, hash uses extra memory, linear is simple sequential check.
  3. Final Answer:

    Check each element one by one until the target is found or list ends -> Option D
  4. Quick Check:

    Linear search = sequential check [OK]
Hint: Linear search means checking items one by one [OK]
Common Mistakes:
  • Confusing linear search with binary search
  • Thinking linear search requires sorted data
  • Assuming linear search uses extra memory
2. Which of the following is the correct Rust syntax to start a linear search loop over a vector arr?
easy
A. while i < arr.len() { }
B. for i in arr { }
C. for i in 0..arr.len() { }
D. loop i in arr.len() { }

Solution

  1. Step 1: Identify correct Rust for loop syntax

    Rust uses for i in 0..arr.len() to loop over indices.
  2. Step 2: Check other options for syntax errors

    for i in arr iterates over values, not indices; while needs initialization; loop i in is invalid.
  3. Final Answer:

    for i in 0..arr.len() { } -> Option C
  4. Quick Check:

    Rust for loop over range = for i in 0..len() [OK]
Hint: Use for i in 0..arr.len() to loop indices [OK]
Common Mistakes:
  • Using for i in arr to get indices instead of values
  • Writing invalid loop syntax like loop i in ...
  • Forgetting to initialize loop variable in while loops
3. What will be the output of this Rust code snippet?
let arr = vec![3, 5, 7, 9];
let target = 7;
let mut index = -1;
for i in 0..arr.len() {
    if arr[i] == target {
        index = i as i32;
        break;
    }
}
println!("{}", index);
medium
A. 0
B. 2
C. 3
D. -1

Solution

  1. Step 1: Trace the loop to find target index

    Loop checks arr[0]=3, arr[1]=5, arr[2]=7 matches target, sets index=2 and breaks.
  2. Step 2: Print the index value

    After break, index is 2, so printed output is 2.
  3. Final Answer:

    2 -> Option B
  4. Quick Check:

    Target 7 found at index 2 [OK]
Hint: Stop loop at first match, print that index [OK]
Common Mistakes:
  • Not breaking loop after finding target
  • Printing index before loop ends
  • Confusing index type casting
4. Identify the error in this Rust linear search code and choose the fix:
let arr = vec![1, 2, 3];
let target = 4;
let mut found = false;
for i in 0..arr.len() {
    if arr[i] = target {
        found = true;
        break;
    }
}
println!("{}", found);
medium
A. Use '==' for comparison instead of '='
B. Change 'found' to integer type
C. Remove the break statement
D. Use while loop instead of for loop

Solution

  1. Step 1: Check the if condition syntax

    The code uses '=' which is assignment, not comparison. It should be '==' to compare values.
  2. Step 2: Verify other options

    Changing 'found' type or removing break won't fix syntax error. Using while loop is valid but not necessary.
  3. Final Answer:

    Use '==' for comparison instead of '=' -> Option A
  4. Quick Check:

    Comparison needs '==' not '=' [OK]
Hint: Use '==' to compare values, '=' assigns [OK]
Common Mistakes:
  • Using '=' instead of '==' in if conditions
  • Removing break causing unnecessary iterations
  • Changing variable types unnecessarily
5. You want to find all indices of a target value in a vector arr using linear search in Rust. Which approach correctly collects all matching indices?
hard
A. Use a loop over indices, push index to a vector when element equals target
B. Break the loop at first match and return that index
C. Sort the vector first, then use binary search for all matches
D. Use a hash map to store element counts and find indices

Solution

  1. Step 1: Understand requirement to find all indices

    We must check every element and collect indices where element equals target.
  2. Step 2: Evaluate options for correctness

    Breaking loop stops early, sorting changes order, hash map counts but doesn't store indices. Only pushing indices in loop works.
  3. Final Answer:

    Use a loop over indices, push index to a vector when element equals target -> Option A
  4. Quick Check:

    Collect all matches by looping and storing indices [OK]
Hint: Collect indices by checking all elements without breaking [OK]
Common Mistakes:
  • Breaking loop too early to find all matches
  • Sorting vector which changes original order
  • Using hash map counts instead of indices
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard