Scalar data types in Rust - Time & Space Complexity
Let's see how the time it takes to work with scalar data types changes as we use more values.
We want to know how the program's steps grow when handling these simple data pieces.
Analyze the time complexity of the following code snippet.
fn sum_numbers(numbers: &[i32]) -> i32 {
let mut total = 0;
for &num in numbers {
total += num;
}
total
}
This code adds up all numbers in a list using scalar integers.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding each number to total inside a loop.
- How many times: Once for every number in the input list.
As the list gets longer, the program adds more numbers one by one.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: The steps grow directly with the number of items.
Time Complexity: O(n)
This means the time to add numbers grows in a straight line with how many numbers there are.
[X] Wrong: "Adding numbers is always instant, no matter how many there are."
[OK] Correct: Each number must be added one by one, so more numbers mean more steps.
Understanding how simple data operations grow helps you explain your code clearly and shows you know how programs handle data efficiently.
"What if we changed the input from a list to a fixed-size array? How would the time complexity change?"
Practice
Solution
Step 1: Recall scalar data types in Rust
Scalar types include integers, floats, booleans, and characters, which hold a single value.Step 2: Identify the non-scalar type
An array holds multiple values and is a compound type, not scalar.Final Answer:
Array -> Option CQuick Check:
Scalar types exclude arrays [OK]
- Confusing arrays with scalar types
- Thinking floats are not scalar
- Mixing compound and scalar types
is_active set to true in Rust?Solution
Step 1: Check Rust boolean syntax
Rust uses lowercasetrueandfalsefor booleans, and the type isbool.Step 2: Validate each option
let is_active: bool = true; correctly declaresis_activeas aboolwith valuetrue. let is_active = True; uses uppercaseTruewhich is invalid. let is_active = 1; assigns an integer, not a boolean. let is_active: boolean = true; usesbooleanwhich is not a Rust type.Final Answer:
let is_active: bool = true; -> Option AQuick Check:
Boolean type isbooland value is lowercasetrue[OK]
- Using uppercase True/False
- Using wrong type name boolean
- Assigning integers to booleans
let x: i32 = 10;
let y: f64 = 3.5;
println!("{}", x as f64 + y);Solution
Step 1: Understand type casting in the code
The integerxis cast tof64usingas f64, so10becomes10.0.Step 2: Perform the addition
Adding10.0(castedx) and3.5(y) results in13.5.Final Answer:
13.5 -> Option BQuick Check:
Cast integer to float, then add floats = 13.5 [OK]
- Forgetting to cast integer
- Expecting integer addition
- Assuming type error without cast
let letter: char = "a";
Solution
Step 1: Check char literal syntax
In Rust,charliterals must be enclosed in single quotes, e.g.,'a', not double quotes.Step 2: Analyze the code
The code uses double quotes"a", which is a string slice, not a char. This causes a type mismatch error.Final Answer:
char type must use single quotes, not double quotes -> Option DQuick Check:
char literals use single quotes 'a' [OK]
- Using double quotes for char
- Confusing char with string
- Ignoring type mismatch errors
Options: A) let temp: i32 = 36.6; B) let temp: char = '36'; C) let temp: bool = true; D) let temp: f64 = 36.6;
Solution
Step 1: Understand the data type needed for decimal numbers
Temperature 36.6 has a decimal part, so it requires a floating-point type likef64.Step 2: Evaluate each option
let temp: i32 = 36.6; because integers store decimal numbers tries to assign a decimal to an integer, which is invalid. let temp: f64 = 36.6; because floats store decimal numbers correctly usesf64for decimals. let temp: bool = true; because temperature is true or false uses boolean, which is unrelated. let temp: char = '36'; because characters store numbers usescharwith invalid multi-character literal.Final Answer:
let temp: f64 = 36.6; because floats store decimal numbers -> Option AQuick Check:
Decimal numbers need float types like f64 [OK]
- Assigning decimals to integers
- Using bool for numeric values
- Using char for multi-digit numbers
Ready to prove it?
Pass the test and this pattern moves unknown
