[Leetcode]_74 Search a 2D Matrix

/**
 *  Index: 74
 *  Title: Search a 2D Matrix
 *  Author: ltree98
 **/

题意

在m*n的矩阵中寻找是否存在某个数。

  • 每行整数都是由小到大排序的
  • 每行第一个数都大于上一行最后一个数

我的

思路

顺序查找

每次先与每行最后一个数比较,直到目标值小于最后数,则该数肯定在此行;再从该行从头比较。

时间复杂度:O(m+n)
空间复杂度:O(1)

二分

这个矩阵两个顺序条件一列,明显就是有序数组,可以用二分来进行解决。

要注意中间值对应的行列值关系。

时间复杂度:O(log(m*n))

空间复杂度:O(1)

实现

顺序查找

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

二分查找

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.empty() || matrix[0].empty())
            return false;
        
        int row = matrix.size();
        int col = matrix[0].size();
        int n = row * col;
        
        int l = 0, h = n - 1;
        while (l <= h){
            int m = (l + h) / 2;
            if (matrix[m / col][m % col] < target)
                l = m + 1;
            else if(matrix[m / col][m % col] > target)
                h = m - 1;
            else
                return true;
        }
        return false;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章