c++ 如何更正我的代码以运行此程序?[已关闭]

xfb7svmp  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(143)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2小时前关门了。
Improve this question
给定一个具有以下两个属性的m x n整数矩阵:
每行按非降序排序。每行的第一个整数大于上一行的最后一个整数。给定整数目标,如果目标在矩阵中,则返回true,否则返回false

public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int i=0;
        int j=0;
        while(i<matrix.size() and j<matrix[0].size() ){
            if(i>=matrix.size() or j>=matrix[0].size()){
                return false;
            }
            if(matrix[i][j]==target){
                return true;
            }
            else if(matrix[i][j+1]<=target and matrix[i+1][j]>target){
                j++;
            }else if(matrix[i+1][j]<=target){
                i++;
            }
            else{
                return false;
            }
        }return false;
    }
};

为什么这个代码不起作用?

a9wyjsp7

a9wyjsp71#

让我们把它分成几个步骤。
我们知道行是排序的,所以我们可以首先找到包含该项的行。我还将使用for循环而不是while循环,因为for循环更好地模拟了我们正在做的事情。

bool searchMatrix(vector<vector<int>>& matrix, int target) {
    // use descriptive variables names to make the code easier to understand
    size_t rowCount = matrix.size();
    if (rowCount == 0) return false;
    size_t colCount = matrix[0].size();

    for (size_t r = 0; r < rowCount; r++) {
        // We need to check if the target could be in this row.
        // So there are three cases:

        // 1. Target is less than all items in this row
        if (target < matrix[r][0]) return false;

        // 2. Target is greater than all items in this row
        if (target > matrix[r][colCount - 1]) continue;

        // 3. Target is within this row if present
        // TODO
    }
}

现在,我们知道它在哪一行了,我们只需要搜索那一行,这看起来像是学校的家庭作业题,我不想只给予你们完整的答案,所以希望你们能从这里把剩下的填上。
我想补充的一点是,我们可以通过使用“range based for loops”和std::vector上的一些helpers方法来消除索引,从而使事情变得更简洁:

bool searchMatrix(vector<vector<int>>& matrix, int target) {
    for (const auto& row : matrix) {
        // We need to check if the target could be in this row.
        // So there are three cases:

        // 1. Target is less than all items in this row
        if (target < row.front()) return false;
        
        // 2. Target is greater than all items in this row
        if (target > row.back()) continue;
        
        // 3. Target is within this row if present
        // TODO (can used a range based for loop for this as well)
    }

    return false;
}

相关问题