力扣刷题之搜索二维矩阵

题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/

这里提供两种解题思路。

思路一:先确定target在矩阵的哪一行,然后在这行元素中查找是否存在该目标值。

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=matrix.size();
        int n=matrix[0].size();
        if(target<matrix[0][0] ||  target>matrix[m-1][n-1])
            return false;
        int row=m-1;
        
            for(int i=0;i<m;i++)
            {
                if(i<m-1 &&target>=matrix[i][0] && target<matrix[i+1][0])
                {
                    row=i;
                    break;
                }
            }   
        
        
        for(int i=0;i<n;i++)
        {
            if(target==matrix[row][i])
                return true;
        }
        return false;



    }
};

思路二:

按题意其实二维数组就是一个递增的一维数组,利用二分查找一维数组。这里注意根据一维数组下标计算出二维数组的下标。

代码如下:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=matrix.size();
        if(m==0)
            return false;
        int n=matrix[0].size();
        int left=0,right=m*n-1;
        int mid,element;
        while(left<=right)
        {
            mid=(left+right)/2;
            element=matrix[mid/n][mid%n];
            if(target==element)
                return true;
            else if(target<element)
                right=mid-1;
            else    
                left=mid+1;
        }
        return false;
    }
posted @ 2021-03-04 22:04  justloving  阅读(107)  评论(0编辑  收藏  举报