c - 在处理并列情况的同时在矩阵中找到最大值 [在 C 中]

标签 c algorithm matrix

我正在尝试找出矩阵中的最大值。我在 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/

相关文章:

c - 向我现有的代码添加 3 个基本功能

编译GLFW找不到-lglfw3

c++ - 使用哨兵试验查找算法

c - 以任意顺序在矩阵中查找模式?

C/C++ 宏求值顺序

c - 有没有办法将 C11 编译为 C89?

algorithm - O(mn) 比 O((m+n)^2) 好吗?

matrix - 一个以距离矩阵为输入的基于密度的聚类库

python - 从 CSV 文件创建矩阵

c++ - Opencv矩阵范围L值: Is this a bug?