TheAlgorithms/C-Sharp · error

Coins array cannot contain duplicates

Error message

Coins array cannot contain duplicates {nameof(coinsAsArray)}.

What it means

ValidateCoinsArray requires all coin denominations to be unique. Duplicate entries do not change the solution but break the solver's assumptions about the coin system, so it throws InvalidOperationException when GroupBy detects any value appearing more than once.

Solutions

  1. Deduplicate the array: coins.Distinct().ToArray() before calling.
  2. Fix the merge/append logic that produced duplicates.
  3. Validate and normalize input denominations once at the boundary of your application.

Example fix

// before
var coins = defaults.Concat(userCoins).ToArray(); // may duplicate
solver.GenerateSingleCoinChanges(coins, amount);
// after
var coins = defaults.Concat(userCoins).Distinct().ToArray();
solver.GenerateSingleCoinChanges(coins, amount);
Defensive patterns

Strategy: validation

Validate before calling

coins = (coins ?? Array.Empty<int>()).Where(c => c > 0).Distinct().ToArray();

Try / catch

try { solver.GenerateSingleCoinChanges(coins, amount); }
catch (InvalidOperationException ex) { Console.Error.WriteLine($"Duplicate coins: {ex.Message}"); }

Prevention

When it happens

Trigger: Calling GenerateSingleCoinChanges with coins such as [1, 1, 5, 10] or [2, 5, 5].

Common situations: Merging denomination lists from multiple sources without deduplication; appending a default coin set to user-supplied coins; Concat of two overlapping arrays.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of TheAlgorithms/C-Sharp@96e2905cab (2026-09-13). Data as JSON: /api/errors/b5779d1923b0e6a0. Report an issue: GitHub.

Appendix: source

Thrown at Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs:166

        if (!coinsContainOne)
        {
            throw new InvalidOperationException($"Coins array must contain coin 1 {nameof(coinsAsArray)}.");
        }

        var containsNonPositive = coinsAsArray.Any(x => x <= 0);

        if (containsNonPositive)
        {
            throw new InvalidOperationException(
                $"{nameof(coinsAsArray)} cannot contain numbers less than or equal to zero");
        }

        var containsDuplicates = coinsAsArray.GroupBy(x => x).Any(g => g.Count() > 1);

        if (containsDuplicates)
        {
            throw new InvalidOperationException($"Coins array cannot contain duplicates {nameof(coinsAsArray)}.");
        }
    }
}

View on GitHub (pinned to 96e2905cab)