LeetCode74 Search a 2D Matrix 解题报告

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 from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,

Consider the following matrix:

[
  [1,   3,  5,  7],
  [10, 11, 16, 20],
  [23, 30, 34, 50]
]

Given target = 3, return true.

题意: 给一个2维德矩阵,矩阵数值在每一行上依次增大,在每一列依次增大,给一个目标值,要求判断该值是否在矩阵上。

Solution:

最简单的想法其实就是依次遍历矩阵上的每一行,然后判断是否相等,但是效率肯定比较慢,然后根据题意可以看出在矩阵M[rows-1][0] 上有一个规律,如果目标值小于该值,则值必定在行数小于rows-1的子矩阵,如果目标值大于该值,则必然在列数大于0的子矩阵,类似的情况在M[0][columns-1] 也存在。

代码:

bool searchMatrix(vector<vector<int>> &matrix, int target)
{
    bool result=false;
    if(matrix.size()==0)
    {
        return result;
    }
    int row=matrix.size();
    int column=matrix[0].size();

    int x=row-1;
    int y=0;

    while(x>=0&&y<=column-1)
    {
        if(matrix[x][y]==target)
        {
            return true;
        }
        else if(matrix[x][y]>target)
        {
            x--;
        }
        else if(matrix[x][y]<target)
        {
            y++;
        }
    }

    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值