- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
解题思路
代码
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty()){
return false;
}
int rows = array.size();
int cols = array[0].size();
// 从右上角开始向左下方查找
int i = 0;
int j = cols - 1;
while(i < rows && j >= 0){
if(array[i][j] == target){
return true;
break;
}
else if(array[i][j] < target){
i++;
}
else{
j--;
}
}
return false;
}
};
总结展望
遗留问题
- 下面代码,左思右想没问题,没想到竟然报错,留待以后解决吧
- 目前想法是有可能递归太多导致超时
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty()){
return false;
}
int rows = array.size();
int cols = array[0].size();
return core(0, 0, rows, cols, array, target);
}
bool core(int x, int y, int rows, int cols, vector<vector<int> >& array, int target){
bool you = false;
bool xia = false;
if(array[x][y] == target){
return true;
}
else{
// 向右
if(y+1 < cols && array[x][y] < target){
you = core(x, y+1, rows, cols, array, target);
}
// 向下
if(x+1 < rows && array[x][y] < target){
xia = core(x+1, y, rows, cols, array, target);
}
return you || xia;
}
}
};