1.题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
//第一种方式
#include<map>
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
map<int,bool>mp; //生成一个map,将vector数组中的数值通过遍历赋值给map的键值
for(int i=0;i<array.size();i++)
{
for(int j=0;j<array[i].size();j++)
{
mp[array[i][j]]=true;
}
}
return mp.find(target)!=mp.end(); //mp.find(target)是产生一个指向target值的迭代器,当没有相应的target时,指向mp.end();
}
};
//第二种方式
class
Solution {
public
:
bool
Find(vector<vector<
int
> > array,
int
target) {
int
m,n,x,y;
m = array.size();
//行数
n = array[0].size();
//列数
x=m-1;y=0;
//坐标定在左下角
while
(x>=0 && y<=n-1){
if
(target<array[x][y]){
x--;
//遇小上移
}
else
if
(target>array[x][y]){
y++;
//遇大右移
}
else
{
return
true
;
}
}
return
false
;
}
};
//左下角开始,遇大右移,遇小上移,直到超过边界都没找到,得false。否则得true。
关于map的操作可以参考:http://blog.csdn.net/allovexuwenqiang/article/details/5686583