前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-面试题04-二维数组中的查找

LeetCode-面试题04-二维数组中的查找

作者头像
benym
发布2022-07-14 14:41:44
2110
发布2022-07-14 14:41:44
举报
文章被收录于专栏:后端知识体系后端知识体系

# LeetCode-面试题04-二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例:

代码语言:javascript
复制
现有矩阵 matrix 如下:
[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]

给定 target = 5,返回 true。
给定 target = 20,返回 false。

限制:
0 <= n <= 1000
0 <= m <= 1000

# 解题思路1

这个问题本身有一定的规律,从左到右数字是递增的,从上到下数字也是递增的。可以从第一行的最大数开始与目标数target比较,如果第一行的最大数比target大的话,这一列就可以排除不是要找的位置了,因为第一行也是一列的最小数,只有当target比第一行某一列大的时候,才需要往下面找,找到一个数之后,target的位置可能是向左或者向下的,但不可能向右了,因为右边已经被排除。整个过程一直重复下去就能找到目标数,没有就返回false

# 解题思路2

每行是从左往右递增有序的,所以只需要对每行进行二分查找,也能快速得到结果

# Java代码

代码语言:javascript
复制
class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        boolean falg = false;
        if (matrix == null || matrix.length == 0) {
            return falg;
        }
        int collen = matrix[0].length - 1;
        int rowlen = 0;
        while (rowlen < matrix.length && collen >= 0) {
            if (target < matrix[rowlen][collen]) {
                collen--;
            } else if (target == matrix[rowlen][collen]) {
                falg = true;
                break;
            } else if (target > matrix[rowlen][collen]) {
                rowlen++;
            }
        }
        return falg;
    }
}

# Python代码

代码语言:javascript
复制
class Solution(object):
    def findNumberIn2DArray(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        falg = False
        if (matrix==None or len(matrix) == 0):
            return falg
        collen = len(matrix[0]) - 1
        rowlen = 0
        while (rowlen < len(matrix) and collen >= 0):
            if target < matrix[rowlen][collen]:
                collen -= 1
            elif target == matrix[rowlen][collen]:
                falg = True
                break
            elif target > matrix[rowlen][collen]:
                rowlen += 1
        return falg

# Java代码2

代码语言:javascript
复制
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix==null||matrix.length==0||matrix[0].length==0){
            return false;
        }
        for(int[] i : matrix){
            int find = search(i,target);
            if(find>=0){
                return true;
            }
        }
        return false;
    }

    public int search(int[] rowMat,int target){
        int left = 0;
        int right = rowMat.length-1;
        while(left<=right){
            int mid = left+(right-left)/2;
            if(rowMat[mid]<target){
                left = mid+1;
            } else if (rowMat[mid]>target){
                right = mid-1;
            } else {
                return 1;
            }
        }
        return -1;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # LeetCode-面试题04-二维数组中的查找
    • # 解题思路1
      • # 解题思路2
        • # Java代码
          • # Python代码
            • # Java代码2
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档