我正在尝试找出矩阵中的最大值。我在 C 中是这样做的:
int max = matrix[0][0], max_i = 0, max_j = 0;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
if(matrix[i][j] > max) {
max = matrix[i][j];
max_i = i;
max_j = j;
}
}
}
但是如果我想知道是否有平局怎么办?在这种情况下,我希望我的函数返回 -1
。我虽然使用另一个变量来保存第二高的值,但在那种情况下,我需要使用另外两个变量:second_max_i 和 second_max_j(代码变得困惑)。
我知道如何用另外两个循环来做到这一点(迭代以找到第二名并进行比较),但是有没有办法只用两个循环(而不是四个)来做到这一点?
最佳答案
如果您遇到另一个与当前最大值具有相同值的元素,您可以通过跟踪来做到这一点。如果这样做,请设置一个“平局”标志。每当找到新的最大值时,清除“平局标志”,如下所示:
int max = matrix[0][0], max_i = 0, max_j = 0, tie = 0;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 10; j++) {
if(matrix[i][j] == max) {
tie = 1;
}
else if(matrix[i][j] > max) {
max = matrix[i][j];
tie = 0;
max_i = i;
max_j = j;
}
}
}
如果 tie == 1
,则可以返回 -1。
编辑添加:请注意,使用当前代码,您初始化 int max = matrix[0][0]
,并且您检查的第一个元素也是 matrix[0][ 0]
。因此,如果 matrix[0][0]
是您的最大元素,您将错误地检测到平局。为防止这种情况,如果您知道矩阵永远不会包含低于某个值的值,则可以将 max
初始化为低于该值的值。例如,如果您可以保证矩阵只包含非负整数,则可以初始化 int max = -1
。
关于c - 在处理并列情况的同时在矩阵中找到最大值 [在 C 中],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50777968/