Relational operators in Rust - Time & Space Complexity
Relational operators compare values to decide true or false. We want to see how fast these comparisons run as input changes.
How does the time to compare values grow when we have more data?
Analyze the time complexity of the following code snippet.
fn count_greater_than(nums: &[i32], threshold: i32) -> usize {
let mut count = 0;
for &num in nums {
if num > threshold {
count += 1;
}
}
count
}
This code counts how many numbers in a list are greater than a given threshold using relational operators.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Comparing each number to the threshold using the > operator inside a loop.
- How many times: Once for every number in the input list.
Each number is checked once, so the work grows evenly with the list size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 comparisons |
| 100 | 100 comparisons |
| 1000 | 1000 comparisons |
Pattern observation: The number of comparisons grows directly with the number of items.
Time Complexity: O(n)
This means the time to finish grows in a straight line as the list gets bigger.
[X] Wrong: "Relational operators take longer time as numbers get bigger."
[OK] Correct: The time to compare two numbers stays the same no matter how big the numbers are; only the number of comparisons matters.
Understanding how simple comparisons scale helps you explain efficiency clearly and shows you know what really affects program speed.
"What if we checked pairs of numbers instead of single numbers? How would the time complexity change?"
Practice
Solution
Step 1: Understand the meaning of relational operators
Relational operators compare two values and return true or false based on the comparison.Step 2: Identify the operator for 'not equal'
The operator '!=' means 'not equal to' in Rust.Final Answer:
!= -> Option AQuick Check:
Not equal operator = != [OK]
- Confusing '!=' with '=='
- Using '<>' which is not valid in Rust
- Mixing up '<=' and '>='
a is greater than or equal to variable b in Rust?Solution
Step 1: Recall Rust relational operator syntax
Rust uses '>=' to check if left value is greater than or equal to right value.Step 2: Identify correct syntax among options
Only 'a >= b' matches the correct Rust syntax.Final Answer:
a >= b -> Option DQuick Check:
Greater or equal operator = >= [OK]
- Using '=>' instead of '>='
- Swapping '=' and '<' in operators
- Confusing assignment '=' with comparison
let x = 10;
let y = 20;
println!("{}", x < y);Solution
Step 1: Understand the comparison operation
The code compares if x (10) is less than y (20), which is true.Step 2: Determine the printed output
Since the condition is true, the printed output will be 'true'.Final Answer:
true -> Option AQuick Check:
10 < 20 = true [OK]
- Confusing output with variable values
- Thinking it prints the smaller number
- Mixing up < and > operators
let a = 5;
let b = 10;
if a <> b {
println!("Not equal");
}Solution
Step 1: Check the relational operator used
The operator '<>' is not a valid relational operator in Rust.Step 2: Confirm correct operator for not equal
Rust uses '!=' to check if two values are not equal.Final Answer:
The operator '<>' is invalid in Rust -> Option BQuick Check:
Not equal operator = !=, not <> [OK]
- Using '<>' from other languages
- Forgetting Rust requires '!='
- Assuming parentheses needed in if condition
Solution
Step 1: Understand the requirement
We want to check if all elements in the list are greater than 0.Step 2: Identify the correct iterator method
'all' returns true only if every element satisfies the condition x > 0.Step 3: Confirm the closure syntax
The closure '|&x| x > 0' correctly compares each element to 0.Final Answer:
numbers.iter().all(|&x| x > 0) -> Option CQuick Check:
Check all elements > 0 with 'all' method [OK]
- Using 'any' which checks only one element
- Using 'filter' which returns iterator, not bool
- Using 'map' which transforms elements, not checks
Ready to prove it?
Pass the test and this pattern moves unknown
