1.题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
这个题其实是个最短路径问题。
要相遇数组中任何一个点,从斜对角方向走是较为快捷的,再根据数组的规则,按照左下角到右上角的方向
找点,最长距离不超过行长+列长。
算法:大于target时右移,小于target时上移
结论: 这大概就是最短路径了!
class Solution {
public:
bool Find(int target, vector<vector<int> > array)
{
int lenrow=array[0].size();
int lenlist=array.size();
int keynum=0;
for(int i=lenlist-1;i>=0;--i)
{
int signnum=0;
for(int j=0;j<lenrow;++j)
{
keynum=array[i][j];
if(target==keynum) return true;
else if(target>keynum)
{
continue;
}
else if(target<keynum)
{
break;
}
signnum=j;
}
if(signnum==lenrow) return false;
}
return false;
}
};