Array basics in Rust - Time & Space Complexity
When working with arrays, it is important to know how the time to do tasks changes as the array gets bigger.
We want to find out how the number of steps grows when we do simple operations on arrays.
Analyze the time complexity of the following code snippet.
fn sum_array(arr: &[i32]) -> i32 {
let mut total = 0;
for &num in arr.iter() {
total += num;
}
total
}
This code adds up all the numbers in an array and returns the total sum.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding each number to the total inside a loop.
- How many times: Once for every item in the array.
As the array gets bigger, the number of additions grows at the same rate.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: The work grows directly with the size of the array.
Time Complexity: O(n)
This means if the array doubles in size, the time to add all numbers roughly doubles too.
[X] Wrong: "Adding all numbers in an array takes the same time no matter how big the array is."
[OK] Correct: The loop must visit each item, so more items mean more steps and more time.
Understanding how simple loops over arrays grow with input size is a key skill that helps you reason about more complex code.
"What if we only summed the first half of the array? How would the time complexity change?"
Practice
Solution
Step 1: Understand array type restrictions
Arrays in Rust hold values all of the same type, ensuring type safety.Step 2: Understand array size behavior
Arrays have a fixed size that cannot be changed after creation.Final Answer:
They store multiple values of the same type in a fixed-size list. -> Option BQuick Check:
Array = fixed size + same type [OK]
- Thinking arrays can hold mixed types
- Assuming arrays can grow or shrink
- Believing arrays don't use indexes
Solution
Step 1: Identify Rust array syntax
Arrays use square brackets [] with comma-separated values.Step 2: Check other options
Parentheses () create tuples, curly braces {} are blocks, angle brackets <> are not valid here.Final Answer:
let arr = [1, 2, 3]; -> Option AQuick Check:
Array syntax uses [] [OK]
- Using parentheses instead of brackets
- Confusing arrays with tuples
- Using invalid symbols like {} or <>
let arr = [10, 20, 30, 40];
println!("{}", arr[2]);Solution
Step 1: Understand array indexing
Rust arrays start indexing at 0, so arr[2] is the third element.Step 2: Identify the element at index 2
The elements are [10, 20, 30, 40], so arr[2] is 30.Final Answer:
30 -> Option DQuick Check:
Index 2 = 30 [OK]
- Starting count at 1 instead of 0
- Confusing element positions
- Expecting runtime error for valid index
let arr = [1, 2, 3];
println!("{}", arr[3]);Solution
Step 1: Check array length and index used
The array has 3 elements with indexes 0, 1, 2. Index 3 is invalid.Step 2: Understand Rust runtime behavior
Accessing arr[3] causes a runtime panic due to index out of bounds.Final Answer:
Index out of bounds error at runtime -> Option CQuick Check:
Invalid index causes runtime panic [OK]
- Assuming index 3 is valid for 3-element array
- Confusing syntax error with runtime error
- Ignoring Rust's panic on invalid index
Solution
Step 1: Understand Rust array repetition syntax
The syntax [value; count] creates an array repeating value count times.Step 2: Check each option
let arr = [0; 5]; uses [0; 5], which creates 5 zeros. Others are invalid or create wrong arrays.Final Answer:
let arr = [0; 5]; -> Option AQuick Check:
Use [value; count] to repeat values [OK]
- Using commas instead of semicolon for repetition
- Confusing multiplication syntax with arrays
- Reversing value and count in repetition
Ready to prove it?
Pass the test and this pattern moves unknown
