📖 Scenario: Imagine you have a sorted list of numbers that has been rotated at some unknown point. For example, the list [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]. Your task is to find the smallest number in this rotated list.
🎯 Goal: You will write a Rust program that finds the minimum number in a rotated sorted array using a simple loop.
📋 What You'll Learn
Create a vector called nums with the exact values [4,5,6,7,0,1,2]
Create a variable called min_value and set it to the first element of nums
Use a for loop with variable num to iterate over nums
Inside the loop, update min_value if num is smaller
Print the min_value after the loop
💡 Why This Matters
🌍 Real World
Rotated sorted arrays appear in systems where data is shifted or rotated, such as circular buffers or rotated logs.
💼 Career
Understanding how to find minimums efficiently in rotated arrays is useful in technical interviews and real-world software that deals with rotated or shifted data.
Progress0 / 4 steps
1
Create the rotated sorted array
Create a vector called nums with the exact values [4,5,6,7,0,1,2].
DSA Rust
Hint
Use let nums = vec![4,5,6,7,0,1,2]; to create the vector.
2
Initialize the minimum value variable
Create a variable called min_value and set it to the first element of nums using nums[0].
DSA Rust
Hint
Use let mut min_value = nums[0]; to create a mutable variable for the minimum value.
3
Find the minimum value using a loop
Use a for loop with variable num to iterate over nums. Inside the loop, update min_value if num is smaller than min_value.
DSA Rust
Hint
Use for num in nums.iter() to loop. Compare *num with min_value and update if smaller.
4
Print the minimum value
Print the min_value using println!("{}", min_value).
DSA Rust
Hint
Use println!("{}", min_value); to print the smallest number.
Practice
(1/5)
1. What is the main goal when finding the minimum in a rotated sorted array?
easy
A. To sort the array back to original order
B. To find the smallest element after the rotation point
C. To count how many times the array was rotated
D. To find the largest element in the array
Solution
Step 1: Understand the rotated sorted array
A rotated sorted array is a sorted array shifted some positions, so the smallest element is the rotation point.
Step 2: Identify the minimum element
The minimum element is the smallest value after the rotation point, which is what we want to find.
Final Answer:
To find the smallest element after the rotation point -> Option B
Quick Check:
Minimum element = smallest after rotation [OK]
Hint: Look for the smallest number where order breaks [OK]
Common Mistakes:
Confusing minimum with maximum element
Trying to count rotations instead of finding minimum
Assuming array is fully sorted without rotation
2. Which Rust code snippet correctly declares a function to find the minimum in a rotated sorted array?
Hint: Rust functions use fn, param: type, -> return_type [OK]
Common Mistakes:
Using 'function' keyword instead of 'fn'
Mixing Python or JavaScript syntax
Incorrect return type placement
3. What is the output of the following Rust code?
fn main() {
let nums = vec![4,5,6,7,0,1,2];
let min = find_min(&nums);
println!("{}", min);
}
fn find_min(nums: &[i32]) -> i32 {
let mut left = 0;
let mut right = nums.len() - 1;
while left < right {
let mid = left + (right - left) / 2;
if nums[mid] > nums[right] {
left = mid + 1;
} else {
right = mid;
}
}
nums[left]
}
medium
A. 0
B. 4
C. 7
D. 2
Solution
Step 1: Understand the binary search logic
The code uses binary search to find the smallest element by comparing mid and right elements.
Step 2: Trace the loop with input [4,5,6,7,0,1,2]
Mid moves to find the point where array rotates; finally left points to 0, the smallest element.
Final Answer:
0 -> Option A
Quick Check:
Minimum in rotated array = 0 [OK]
Hint: Binary search narrows to smallest element [OK]
Common Mistakes:
Returning nums[mid] instead of nums[left]
Confusing left and right pointers
Not handling rotation correctly
4. Identify the bug in this Rust function to find the minimum in a rotated sorted array:
fn find_min(nums: &[i32]) -> i32 {
let mut left = 0;
let mut right = nums.len();
while left < right {
let mid = left + (right - left) / 2;
if nums[mid] > nums[right] {
left = mid + 1;
} else {
right = mid;
}
}
nums[left]
}
medium
A. nums[left] should be nums[right] at the end
B. left should start at 1 instead of 0
C. mid calculation causes infinite loop
D. right should be nums.len() - 1 to avoid out-of-bounds
Solution
Step 1: Check initialization of right pointer
right is set to nums.len(), which is out of array bounds (index max is len-1).
Step 2: Correct right initialization
right should be nums.len() - 1 to avoid accessing nums[right] out of bounds.
Final Answer:
right should be nums.len() - 1 to avoid out-of-bounds -> Option D
Quick Check:
Array index max = len-1 [OK]
Hint: Array indices go from 0 to len-1 [OK]
Common Mistakes:
Using nums.len() as index causes panic
Starting left at 1 misses first element
Changing mid calculation unnecessarily
5. Given a rotated sorted array that may contain duplicates, which modification is needed in the binary search to find the minimum correctly?
fn find_min(nums: &[i32]) -> i32 {
let mut left = 0;
let mut right = nums.len() - 1;
while left < right {
let mid = left + (right - left) / 2;
if nums[mid] > nums[right] {
left = mid + 1;
} else if nums[mid] < nums[right] {
right = mid;
} else {
right -= 1; // What is the reason for this?
}
}
nums[left]
}
hard
A. To avoid infinite loop by always moving left
B. To speed up search by skipping elements
C. To handle duplicates by shrinking right when equal to mid
D. To sort the array during search
Solution
Step 1: Understand duplicates effect
When nums[mid] equals nums[right], we cannot decide which side minimum lies, so we reduce right by one.
Step 2: Reason for right -= 1
This safely shrinks the search space without missing the minimum, handling duplicates correctly.
Final Answer:
To handle duplicates by shrinking right when equal to mid -> Option C
Quick Check:
Duplicates need careful right pointer move [OK]
Hint: When equal, reduce right to handle duplicates [OK]
Common Mistakes:
Ignoring duplicates causes wrong minimum
Moving left instead of right when equal
Assuming no duplicates in rotated array
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.