力扣每日一题74:搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

力扣每日一题74:搜索二维矩阵_第1张图片

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

力扣每日一题74:搜索二维矩阵_第2张图片

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104

通过次数

341.4K

提交次数

696.7K

通过率

49.0%

思路和题解:

二维矩阵的每一行是非严格递增的,而每一格的第一个数大于上一格的最后一个数。如果将二维矩阵按照行展开得到一个一维数组,这个一维数组是非严格递增的。在一个非严格递增的一维数组中找一个值,可以用二分搜索。

代码:

class Solution {
public:
    bool searchMatrix(vector>& matrix, int target) {
        int m=matrix.size();
        int n=matrix[0].size();
        int lo=0,hi=m*n-1;
        while(lo<=hi)
        {
            int mid=(lo+hi)/2;
            if(matrix[mid/n][mid%n]==target)
            {
                return true;
            }
            else if(matrix[mid/n][mid%n]

你可能感兴趣的:(LeetCode每日一题,leetcode,矩阵,算法)