题目:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
示例 2:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
链接:https://leetcode-cn.com/problems/search-a-2d-matrix
思路:
1、根据题意可知,矩阵是一个递增的序列,因此可以从右上角开始找target,如果右上角的值比target大,则最右边一列都比target大,那可以删掉最后一列,继续查找右上角的值。如果右上角的值比target小,则说明第一行都比target小,则可以删除第一列,继续查找右上角的值
2、递归的执行上述操作,直至找到target返回true,如果一直没找到,则返回false
Python代码:
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if not matrix or not matrix[0]:
return False
m = 0
n = len(matrix[0])
while m<len(matrix) and n>0:
num = matrix[m][n-1]
if num==target:
return True
elif num>target:
n -= 1
else:
m += 1
return False
C++代码:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.size()==0 || matrix[0].size()==0){
return false;
}
int m = 0;
int n = matrix[0].size();
while(m<matrix.size() && n>0){
int num = matrix[m][n-1];
if (num==target){
return true;
}else if (num>target){
n -= 1;
}else{
m += 1;
}
}
return false;
}
};