Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted in ascending from left to right.
- Integers in each column are sorted in ascending from top to bottom.
Example:
Consider the following matrix:
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]
Given target = 5
, return true
.
Given target = 20
, return false
.
题目大意:
在一个二维数组中找出target。数组按照行列数组由大到小顺序排列。
解题思路:
如果当前(0,0)的数比tar小,我们需要从行的方面考虑从0到m-1,i++
当前的数比tar大,我们需要从列方面考虑从n-1到0,j--
class Solution {
public:
bool searchMatrix(vector<vector<int>>& maps, int tar) {
int m = maps.size();
if(m==0) return false;
int n = maps[0].size();
if(n==0) return false;
int i = 0, j = n - 1;
while(i<m&&i>=0&&j<n&&j>=0){
int num = maps[i][j];
if(num == tar) return true;
if(num < tar){
i++;
}
if(num > tar){
j--;
}
}
return false;
}
};