leetcode--74--搜索二维矩阵

题目:
编写一个高效的算法来判断 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;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容