题解 | #二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
很有意思的一道题,想了差不多15分钟,由于数组每一列,每一行都是递增的,我们从左到右枚举,令i为每一列的最后一个可能为target的下标,列举每一列的过程可以缩小i的范围。
样例解释:
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
target=3
我们令i等于3,列举第0列发现2是小于3的,i值变为1,由于4是大于3的,所以第2行和第3行剩余的数都是大于3的,
列举第1列,2<3,i变为0,列举第2列,8>3往后没有小于3的了,退出循环,返回false。
public:
bool Find(int target, vector<vector<int> > array) {
int n=array.size();
int m=array[0].size();
int i=n-1,j=0;
for(;j<m;j++)
{
if(array[0][j]<=target)
{
for(;i>=0;i--)
{
if(array[i][j]==target) return true;
if(array[i][j]<target) break;
}
}
else break;
}
return false;
}
};