Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Coin Change Minimum Coins in DSA Typescript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Coin Change Minimum Coins
O(amount x coins.length)
Understanding Time Complexity

We want to understand how the time needed to find the minimum coins changes as the amount grows.

How does the number of steps grow when we try to make bigger amounts with given coins?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


function minCoins(coins: number[], amount: number): number {
  const dp = new Array(amount + 1).fill(Infinity);
  dp[0] = 0;
  for (let i = 1; i <= amount; i++) {
    for (const coin of coins) {
      if (coin <= i) {
        dp[i] = Math.min(dp[i], dp[i - coin] + 1);
      }
    }
  }
  return dp[amount] === Infinity ? -1 : dp[amount];
}
    

This code finds the fewest coins needed to make a given amount using the coins available.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Nested loops where for each amount from 1 to the target, we check all coins.
  • How many times: Outer loop runs amount times; inner loop runs coins.length times for each outer iteration.
How Execution Grows With Input

As the amount grows, the steps grow by roughly the amount times the number of coins.

Input Size (amount)Approx. Operations
1010 x coins.length
100100 x coins.length
10001000 x coins.length

Pattern observation: The work grows linearly with the amount and linearly with the number of coins.

Final Time Complexity

Time Complexity: O(amount x coins.length)

This means the time needed grows proportionally with the amount and the number of coin types.

Common Mistake

[X] Wrong: "The time depends only on the amount, not on the number of coins."

[OK] Correct: Each coin is checked for every amount, so more coins mean more checks and more time.

Interview Connect

Understanding this complexity helps you explain how your solution scales and shows you can analyze nested loops clearly.

Self-Check

"What if we used recursion with memoization instead of loops? How would the time complexity change?"

Practice

(1/5)
1. What does the "Coin Change Minimum Coins" problem ask you to find?
easy
A. The maximum amount of money you can make with given coins
B. The total number of different coins available
C. The least number of coins needed to make a given amount
D. The sum of all coin values

Solution

  1. Step 1: Understand the problem goal

    The problem asks for the minimum number of coins needed to make a specific amount.
  2. Step 2: Differentiate from other coin problems

    It is not about counting coins or maximum amount, but minimizing coin count for exact amount.
  3. Final Answer:

    The least number of coins needed to make a given amount -> Option C
  4. Quick Check:

    Minimum coins = least number needed [OK]
Hint: Focus on minimum coins to form amount, not total coins [OK]
Common Mistakes:
  • Confusing minimum coins with total coin types
  • Thinking problem asks for maximum amount
  • Ignoring the exact amount requirement
2. Which of the following is the correct TypeScript function signature for a coin change minimum coins function?
easy
A. function minCoins(coins: number[], amount: number): number
B. function minCoins(amount: number, coins: number[]): void
C. function minCoins(coins: number, amount: number[]): number[]
D. function minCoins(coins: string[], amount: string): number

Solution

  1. Step 1: Check parameter types and order

    The function should take an array of coin values (number[]) and an amount (number).
  2. Step 2: Check return type

    The function returns a number representing minimum coins needed.
  3. Final Answer:

    function minCoins(coins: number[], amount: number): number -> Option A
  4. Quick Check:

    Correct types and return number [OK]
Hint: Coins array first, amount second, returns number [OK]
Common Mistakes:
  • Swapping parameter order
  • Using wrong types like string instead of number
  • Returning void or array instead of number
3. What is the output of the following TypeScript code?
function minCoins(coins: number[], amount: number): number {
  const dp = Array(amount + 1).fill(amount + 1);
  dp[0] = 0;
  for (let i = 1; i <= amount; i++) {
    for (const coin of coins) {
      if (coin <= i) {
        dp[i] = Math.min(dp[i], dp[i - coin] + 1);
      }
    }
  }
  return dp[amount] > amount ? -1 : dp[amount];
}

console.log(minCoins([1, 2, 5], 11));
medium
A. 2
B. 3
C. -1
D. 5

Solution

  1. Step 1: Understand dp array initialization

    dp array size is 12 (0 to 11), initialized with 12 (amount+1), dp[0] = 0.
  2. Step 2: Calculate dp values for amount 11

    Using coins 1,2,5, minimum coins for 11 is 3 (5+5+1).
  3. Final Answer:

    3 -> Option B
  4. Quick Check:

    Minimum coins for 11 with [1,2,5] = 3 [OK]
Hint: Use dp array to track min coins for each amount [OK]
Common Mistakes:
  • Returning dp[amount] without checking if > amount
  • Misunderstanding dp initialization
  • Confusing coin values and indices
4. Identify the bug in this TypeScript code for minimum coins:
function minCoins(coins: number[], amount: number): number {
  const dp = new Array(amount + 1).fill(0);
  dp[0] = 0;
  for (let i = 1; i <= amount; i++) {
    dp[i] = Infinity;
    for (const coin of coins) {
      if (coin < i) {
        dp[i] = Math.min(dp[i], dp[i - coin] + 1);
      }
    }
  }
  return dp[amount] === Infinity ? -1 : dp[amount];
}
medium
A. The condition should be coin <= i, not coin < i
B. dp array should be initialized with Infinity, not 0
C. dp[0] should be Infinity, not 0
D. Return statement should check dp[amount] > Infinity

Solution

  1. Step 1: Check coin usage condition

    The condition 'coin < i' skips cases where coin equals i, missing exact matches.
  2. Step 2: Correct condition to include equal coins

    Change condition to 'coin <= i' to allow using coin equal to current amount.
  3. Final Answer:

    The condition should be coin <= i, not coin < i -> Option A
  4. Quick Check:

    Include coin equal to amount [OK]
Hint: Use <= to include exact coin matches [OK]
Common Mistakes:
  • Using < instead of <= in coin check
  • Initializing dp array incorrectly
  • Wrong return condition check
5. Given coins = [2, 3, 7] and amount = 13, what is the minimum number of coins needed? Use the coin change minimum coins approach.
hard
A. -1
B. 4
C. 2
D. 3

Solution

  1. Step 1: Try combinations to form 13

    Possible combos: 7+3+3 = 3 coins, 2+2+2+7 = 4 coins, etc.
  2. Step 2: Identify minimum coins

    Minimum coins is 3 using 7, 3, and 3.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    7+3+3 = 13 with 3 coins [OK]
Hint: Try largest coins first to minimize count [OK]
Common Mistakes:
  • Assuming no solution (-1) without checking combos
  • Counting coins incorrectly
  • Ignoring combinations with repeated coins
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard