1、
主站第二百四十题
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:从左下角或从右上角开始,例如从左下角开始,若target大则右移,target小则左移。
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int lines=matrix.size();
//int columns=matrix.at(0).size(); //我终于知道为啥一直过不了了,原来是这里越界了!!样例是[],所以直接at(0),直接越界,while中就会进行了一次&&短路!
int i=lines-1,j=0;
while(i>=0&&j<=matrix.at(0).size()-1){ //注意这里不可以写j<=matrix.at(0).size()-1,也会出现越界的情况,血的教训!样例[[]],因为这里lines=1了。
//我也还是不明白j<=matrix.at(0).size()-1和j<matrix.at(0).size()有什么区别
if(matrix.at(i).at(j)>target){
i--;
}
else if(matrix.at(i).at(j)<target){
j++;
}
else{
return true;
}
}
return false;
}
};
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int lines=matrix.size();
int i=lines-1,j=0;
//保险起见,直接无脑判断!
if(lines==0||matrix.at(0).size()==0){
return false;
}
int columns=matrix.at(0).size();
while(i>=0&&j<=columns-1){
if(matrix[i][j]>target){
i--;
}
else if(matrix[i][j]<target){
j++;
}
else{
return true;
}
}
return false;
}
};
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int i = matrix.size() - 1, j = 0;
while(i >= 0 && j < matrix[0].size())
{
if(matrix[i][j] > target) i--;
else if(matrix[i][j] < target) j++;
else return true;
}
return false;
}
};