- 已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含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;
}
};
为什么这个代码不起作用?
1条答案
按热度按时间a9wyjsp71#
让我们把它分成几个步骤。
我们知道行是排序的,所以我们可以首先找到包含该项的行。我还将使用for循环而不是while循环,因为for循环更好地模拟了我们正在做的事情。
现在,我们知道它在哪一行了,我们只需要搜索那一行,这看起来像是学校的家庭作业题,我不想只给予你们完整的答案,所以希望你们能从这里把剩下的填上。
我想补充的一点是,我们可以通过使用“range based for loops”和std::vector上的一些helpers方法来消除索引,从而使事情变得更简洁: