题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
关键思路
- 知道一个二维数组,每一行升序,每一列也升序。
- 选择遍历的初始点为右上角位置的元素a,其坐标为(x, y)。
- 若target等于a,return true。
- 若target小于a,向行的左边遍历,–y。
- 若target大于a,向列的下边遍历,++x。
- 每次遍历元素的时候判断(x, y)是否有效。
代码
class Solution {
public:
bool isValid(int X, int Y, int x, int y ) {
return x >= 0 && x < X && y >= 0 && y < Y;
}
bool Find(int target, vector<vector<int> > array) {
if ( array.size() == 0 ) return false;
int rows = array.size();
int columns = array[0].size();
int x = 0;
int y = columns - 1;
while ( isValid(rows, columns, x, y) ) {
if ( array[x][y] == target )
return true;
if ( array[x][y] > target )
--y;
else
++x;
}
return false;
}
};