TheAlgorithms/Java · error · IllegalArgumentException
Input array should not contain negative number(s).
Error message
Input array should not contain negative number(s).
What it means
Thrown by MinimumSumPartition.minimumSumPartition(int[]) when any array element is negative. The algorithm builds a subset-sum DP table indexed by sums; negative values would create invalid/negative array indices, so they are rejected up front via throwIfInvalidInput. The message is 'Input array should not contain negative number(s).'
Source
Thrown at src/main/java/com/thealgorithms/dynamicprogramming/MinimumSumPartition.java:28
Input: array[] = {1, 6, 11, 4}
Output: 0
Explanation:
Subset1 = {1, 4, 6}, sum of Subset1 = 11
Subset2 = {11}, sum of Subset2 = 11
Input: array[] = {36, 7, 46, 40}
Output: 23
Explanation:
Subset1 = {7, 46} ; sum of Subset1 = 53
Subset2 = {36, 40} ; sum of Subset2 = 76
*/
public final class MinimumSumPartition {
private MinimumSumPartition() {
}
private static void throwIfInvalidInput(final int[] array) {
if (Arrays.stream(array).anyMatch(a -> a < 0)) {
throw new IllegalArgumentException("Input array should not contain negative number(s).");
}
}
public static int minimumSumPartition(final int[] array) {
throwIfInvalidInput(array);
int sum = Arrays.stream(array).sum();
boolean[] dp = new boolean[sum / 2 + 1];
dp[0] = true; // Base case , don't select any element from array
// Find the closest sum of subset array that we can achieve which is closest to half of sum of full array
int closestPartitionSum = 0;
for (int i = 0; i < array.length; i++) {
for (int j = sum / 2; j > 0; j--) {
if (array[i] <= j) {
dp[j] = dp[j] || dp[j - array[i]];
}
if (dp[j]) {View on GitHub (pinned to fdfb9a395b)
Solutions
- Filter or reject negative values before calling minimumSumPartition (validate at the data boundary).
- Convert the problem domain so weights are non-negative, or take absolute values only if semantically correct.
- Add a unit test that asserts no negative slips through the input pipeline.
Example fix
// before
int result = MinimumSumPartition.minimumSumPartition(arr);
// after
for (int v : arr) {
if (v < 0) throw new IllegalArgumentException("no negatives: " + v);
}
int result = MinimumSumPartition.minimumSumPartition(arr); Defensive patterns
Strategy: validation
Validate before calling
for (int v : array) {
if (v < 0) throw new IllegalArgumentException("no negatives: " + v);
}
MinimumSumPartition.minimumSumPartition(array); Prevention
- Validate numeric ranges at the data-ingest boundary.
- Avoid mixing sentinel values (-1) into payload arrays.
- Add property-based tests asserting non-negative inputs.
When it happens
Trigger: Passing an array containing a negative value; reading signed integers from external data without sanitizing; using a sentinel like -1 in the input.
Common situations: Mixing sentinel/error markers into real data; off-by-one when slicing arrays; numeric parsing that allows leading '-' signs.
Related errors
- Frequencies cannot be negative
- Keys and frequencies cannot be null
- Keys and frequencies must have the same length
- Price array cannot be null or empty.
- Rod length cannot be negative.
AI-assisted analysis of TheAlgorithms/Java@fdfb9a395b (2026-08-13).
Data as JSON: /api/errors/6a0f600011acaff2.
Report an issue: GitHub.