DartLexx
BAN USERpublic int getMinimumSum(int[][] matrix) {
if (matrix == null) {
throw new IllegalArgumentException("matrix is null");
}
int N = matrix.length;
if (N < 2) {
throw new IllegalArgumentException("Number of rows must be equal or greater than 2");
}
int M = matrix[0].length;
if (M < 1) {
throw new IllegalArgumentException("Number of columns must be equal or greater than 1");
}
int result = 0;
int minDelta = Integer.MAX_VALUE;
boolean[] visitedColumns = new boolean[M];
for (int j=0; j < visitedColumns.length; j++) {
visitedColumns[j] = false;
}
for (int i=0; i < N; i++) {
int currentMaxIndex = 0;
int previousMaxIndex = 0;
for (int j=1; j < M; j++) {
if (matrix[i][j] > matrix[i][currentMaxIndex]) {
result += matrix[i][currentMaxIndex];
visitedColumns[currentMaxIndex] = true;
previousMaxIndex = currentMaxIndex;
currentMaxIndex = j;
} else {
if (previousMaxIndex == currentMaxIndex || matrix[i][j] > matrix[i][previousMaxIndex]) {
previousMaxIndex = j;
}
result += matrix[i][j];
visitedColumns[j] = true;
}
}
int delta = matrix[i][currentMaxIndex] - matrix[i][previousMaxIndex];
if (delta < minDelta) {
minDelta = delta;
}
}
for (boolean visitedColumn : visitedColumns) {
if (!visitedColumn) {
return result + minDelta;
}
}
return result;
}
- DartLexx July 25, 2019