Challenge - 5 Problems
Coin Change Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of minimum coins calculation for amount 11
What is the output of the following Rust code that calculates the minimum number of coins needed to make amount 11 using coins [1, 2, 5]?
DSA Rust
fn min_coins(coins: &[i32], amount: i32) -> i32 {
let mut dp = vec![amount + 1; (amount + 1) as usize];
dp[0] = 0;
for i in 1..=amount {
for &coin in coins {
if coin <= i {
dp[i as usize] = std::cmp::min(dp[i as usize], dp[(i - coin) as usize] + 1);
}
}
}
if dp[amount as usize] > amount { -1 } else { dp[amount as usize] }
}
fn main() {
let coins = vec![1, 2, 5];
let amount = 11;
println!("{}", min_coins(&coins, amount));
}Attempts:
2 left
💡 Hint
Think about the fewest coins that sum to 11 using 1, 2, and 5.
✗ Incorrect
The minimum coins to make 11 are 5 + 5 + 1, which is 3 coins.
❓ Predict Output
intermediateOutput when no solution exists
What is the output of this Rust code when trying to make amount 3 with coins [2, 4]?
DSA Rust
fn min_coins(coins: &[i32], amount: i32) -> i32 {
let mut dp = vec![amount + 1; (amount + 1) as usize];
dp[0] = 0;
for i in 1..=amount {
for &coin in coins {
if coin <= i {
dp[i as usize] = std::cmp::min(dp[i as usize], dp[(i - coin) as usize] + 1);
}
}
}
if dp[amount as usize] > amount { -1 } else { dp[amount as usize] }
}
fn main() {
let coins = vec![2, 4];
let amount = 3;
println!("{}", min_coins(&coins, amount));
}Attempts:
2 left
💡 Hint
Check if amount 3 can be formed by 2 and 4.
✗ Incorrect
3 cannot be formed by any combination of 2 and 4, so the function returns -1.
🔧 Debug
advancedIdentify the error in this coin change implementation
What error will this Rust code produce when run, and why?
DSA Rust
fn min_coins(coins: &[i32], amount: i32) -> i32 {
let mut dp = vec![amount + 1; amount as usize];
dp[0] = 0;
for i in 1..=amount {
for &coin in coins {
if coin <= i {
dp[i as usize] = std::cmp::min(dp[i as usize], dp[(i - coin) as usize] + 1);
}
}
}
if dp[amount as usize] > amount { -1 } else { dp[amount as usize] }
}
fn main() {
let coins = vec![1, 2, 5];
let amount = 11;
println!("{}", min_coins(&coins, amount));
}Attempts:
2 left
💡 Hint
Check the size of dp vector and the indices accessed.
✗ Incorrect
The dp vector size is amount, but code accesses dp[amount], which is out of bounds causing panic.
🧠 Conceptual
advancedWhy use dynamic programming for coin change minimum coins?
Why is dynamic programming a good approach to solve the minimum coins problem?
Attempts:
2 left
💡 Hint
Think about how repeated calculations are avoided.
✗ Incorrect
Dynamic programming stores results of subproblems to avoid repeated work, making it efficient.
❓ Predict Output
expertOutput of minimum coins for large amount with given coins
What is the output of this Rust code for amount 27 with coins [1, 5, 10, 25]?
DSA Rust
fn min_coins(coins: &[i32], amount: i32) -> i32 {
let mut dp = vec![amount + 1; (amount + 1) as usize];
dp[0] = 0;
for i in 1..=amount {
for &coin in coins {
if coin <= i {
dp[i as usize] = std::cmp::min(dp[i as usize], dp[(i - coin) as usize] + 1);
}
}
}
if dp[amount as usize] > amount { -1 } else { dp[amount as usize] }
}
fn main() {
let coins = vec![1, 5, 10, 25];
let amount = 27;
println!("{}", min_coins(&coins, amount));
}Attempts:
2 left
💡 Hint
Try to find the fewest coins that sum to 27 using 1, 5, 10, 25.
✗ Incorrect
The minimum coins for 27 are 25 + 1 + 1, which is 3 coins.
