前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一题《剑指offer》数组篇之二维数组中的查找

每日一题《剑指offer》数组篇之二维数组中的查找

作者头像
终有救赎
发布2023-10-16 10:16:50
1840
发布2023-10-16 10:16:50
举报
文章被收录于专栏:多线程

题目链接:二维数组中的查找

JZ4 二维数组中的查找

难度:中等

描述

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

数据范围

数据范围:矩阵的长宽满足0≤n,m≤500,矩阵中的值满足 0≤val≤10^9

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

举例

比如在下面的二维数组中查找数字7,查找过程如下:

image.png
image.png

解题思路

很明显,由于该二维数组上到下递增,左到右递增的特殊性,遍历整个矩阵进行查找不是该题目的意图所在。总结规律我们可以发现:应该从矩阵的右上角或者左下角开始查找。

以右上角为例,首先选取右上角的数字,如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则说明该列其他元素都大于要查找的数字,便可以删掉该列;如果该数字小于要查找的数字,则说明该行其他元素也都小于要查找的数字,便可以删掉该行。

这样,每一次比较都可以剔除一行或者一列,进而缩小查找范围,时间复杂度为O(n)

编程实现(java)

代码语言:javascript
复制
class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
       //如果数组为空,则直接返回false
        if(matrix==null || matrix.length == 0 ) {
            return false;
        }
        //从右上角开始找
        int i=0,j=0;
        for(i =0,j=matrix[0].length-1; i<matrix.length && j>=0;) {
            if(matrix[i][j] == target) {
                return true;                //如果找到直接返回true
            }
            else if(matrix[i][j]>target) {   //如果该值大于查找值,跳过该列
                j--;
            }
            else {                          //如果该值小于查找值,跳过该行
                i++;
            }
        }
        return false;                       //最后记得返回false,不然会报错
    }
}

结果

image.png
image.png
image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JZ4 二维数组中的查找
    • 描述
      • 数据范围
        • 举例
          • 解题思路
            • 编程实现(java)
              • 结果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档