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.
For 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.
对于排序好的矩阵,右上角开始搜索。
这道题很棒。
建议和leetcode 378. Kth Smallest Element in a Sorted Matrix 和 leetcode 668. Kth Smallest Number in Multiplication Table 有序矩阵搜索
代码如下:
/*
* 右上角搜索
* */
class Solution
{
public boolean searchMatrix(int[][] matrix, int target)
{
if(matrix==null || matrix.length<=0)
return false;
int i=0 , j=matrix[0].length-1;
while(i<matrix.length && j>=0)
{
if(matrix[i][j]==target)
return true;
else if(matrix[i][j]>target)
j--;
else
i++;
}
return false;
}
}
下面是C++的做法,就是一个右上角搜索的做法,很经典
代码如下:
#include <iostream>
#include <alogrithm>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
class Solution
{
public:
bool searchMatrix(vector<vector<int>>& mat, int target)
{
if (mat.size() <= 0)
return false;
int i = 0;
int j = mat[0].size() - 1;
while (i < mat.size() && j >= 0)
{
if (mat[i][j] == target)
return true;
else if (target < mat[i][j])
j--;
else
i++;
}
return false;
}
};