在一个项目中,我需要计算给定分数的最大值。之后,应删除此特定行和相关列,以便每行仅获得一个最大值。所以我的结果应该像这样:
结果
这是我到目前为止所拥有的。
float max = Float.MIN_VALUE;
int remove_row = firstCluster.size()+1;
int remove_column = firstCluster.size()+1;
float[ ][ ] scores = new float[firstCluster.size()][secondCluster.size()];
for(int i=0; i<scores.length; i++){
if ( i == remove_row)
continue;
for(int j=0; j<scores[i].length; j++){
if ( j == remove_column){
continue;
}
else{
System.out.print(scores[i][j]);
if(scores[i][j] >= max)
{
max = Math.max(max, scores[i][j]);
remove_row = i;
remove_column = j;
System.out.print("Max: "+max);
}
}
}
System.out.println("##############################");
}
想法是跳过上一个最大值的列和行,但是如果您处于3个迭代中,则只跳过上一个最大值的列和行,而不是所有先前迭代的列和行。有没有更好的方法来解决这个问题?我不需要使用必要的二维数组
最佳答案
只需对评论进行总结即可得出正确的答案:
而不是在单元格中放置零,而是保持两个Set的usedRows
和usedColumns
-跟踪您划掉的行和列,并在if(scores[i][j] >= max)
之前使用额外的if语句来装运这些行和列
请记住在每个iteraton的开头重置max:
max = Float.MIN_VALUE