文章目录

  • 1.题目描述
  • 2.解决方法
    • (1)暴力法
    • (2)线性查找(右上角->左下角)
  • 参考:

1.题目描述

2.解决方法

(1)暴力法

  • 如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的每一个元素,判断目标值是否在二维数组中存在。

  • 依次遍历二维数组的每一行和每一列。如果找到一个元素等于目标值,则返回 true。如果遍历完毕仍未找到等于目标值的元素,则返回 false。

  • 时间复杂度:O(nm)O(nm)。二维数组中的每个元素都被遍历,因此时间复杂度为二维数组的大小。

  • 空间复杂度:O(1)O(1)。

class Solution {public boolean findNumberIn2DArray(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}int rows = matrix.length, columns = matrix[0].length;for (int i = 0; i < rows; i++) {for (int j = 0; j < columns; j++) {if (matrix[i][j] == target) {return true;}}}return false;}
}

(2)线性查找(右上角->左下角)

  • 由于给定的二维数组具备每行从左到右递增以及每列从上到下递增的特点,当访问到一个元素时,可以排除数组中的部分元素。

  • 从二维数组的右上角开始查找。如果当前元素等于目标值,则返回 true。如果当前元素大于目标值,则移到左边一列。如果当前元素小于目标值,则移到下边一行。

  • 可以证明这种方法不会错过目标值。如果当前元素大于目标值,说明当前元素的下边的所有元素都一定大于目标值,因此往下查找不可能找到目标值,往左查找可能找到目标值。如果当前元素小于目标值,说明当前元素的左边的所有元素都一定小于目标值,因此往左查找不可能找到目标值,往下查找可能找到目标值。

  • 若数组为空,返回 false
    初始化行下标为 0,列下标为二维数组的列数减 1
    重复下列步骤,直到行下标或列下标超出边界
    获得当前下标位置的元素 num
    如果 num 和 target 相等,返回 true
    如果 num 大于 target,列下标减 1
    如果 num 小于 target,行下标加 1

  • 循环体执行完毕仍未找到元素等于 target ,说明不存在这样的元素,返回 false

  • 时间复杂度:O(n+m)O(n+m)。访问到的下标的行最多增加 n 次,列最多减少 m 次,因此循环体最多执行 n + m 次。

  • 空间复杂度:O(1)O(1)。

class Solution {public boolean findNumberIn2DArray(int[][] matrix, int target) {if(matrix.length==0||matrix[0].length==0||matrix==null)return false;int rows=matrix.length,columns=matrix[0].length;int row=0,column=columns-1;while(row<rows&&column>=0){if(matrix[row][column]==target){return true;}else if(matrix[row][column] > target){column--;}else{row++;}}return false;}
}

参考:

https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/solution/mian-shi-ti-04-er-wei-shu-zu-zhong-de-cha-zhao-b-3/

《剑指offer》——04. 二维数组中的查找——暴力法、线性查找——java实现相关推荐

  1. 【LeetCode】剑指 Offer 04. 二维数组中的查找

    [LeetCode]剑指 Offer 04. 二维数组中的查找 文章目录 [LeetCode]剑指 Offer 04. 二维数组中的查找 package offer;public class Solu ...

  2. 利用指针数组计算2个3行4列矩阵的和_[剑指 Offer] 04. 二维数组中的查找

    难度:简单 题目链接:剑指 Offer 04. 二维数组中的查找 题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, ...

  3. 剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个 ...

  4. Leetcode 剑指 Offer 04. 二维数组中的查找 (每日一题 20210727)

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

  5. 【千字过程分析】剑指 Offer 04. 二维数组中的查找

    立志用最少的代码做最高效的表达 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数 ...

  6. C语言二维数组找出交集,【leetcode C语言实现】剑指 Offer 04. 二维数组中的查找...

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

  7. 数组中查找並返回数组_剑指 Offer 04. 二维数组中的查找

    1. 题目 力扣​leetcode-cn.com 2. 描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二 ...

  8. 【算法】剑指 Offer 04. 二维数组中的查找 【重刷】

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

  9. 剑指offer 04.二维数组中的查找 我妹妹都看的懂的方法

    ⭐欢迎来到剑指offer好题精选专栏,一起学习,一起进步⭐ 题目信息: 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请 ...

  10. Leetcode每日一题:剑指 Offer 04.(二维数组中的查找)

    思路:有序+查找元素,第一想到的就是二分法,所以我对每行采用二分法,每行的复杂度为O(m),那么总的复杂度就是O(nlogm):看题解从右上角开始,这个数比目标值大,就往左移一列,比目标值小,就往下移 ...

最新文章

  1. 驱动学习模块最简单示例
  2. Erlang的边界检查(3)
  3. 138.括号序列(区间型DP)
  4. Redis工作笔记-Set类型
  5. linux中的socket编程,linux中socket编程
  6. 中文分词——正向最大匹配法
  7. IOT---(7)Android Things 入门
  8. RateLimiter
  9. usb接口供电不足_USB不被电脑识别,按F8有用吗?这篇文章告诉你
  10. 打工人打工魂,打工人上人
  11. Fiddler改包场景2——拦截请求,修改响应,放行请求
  12. 2021年安全员-C证(安徽省)考试试卷及安全员-C证(安徽省)试题及解析
  13. TSC TTP-244条码打印机如何批量打印二维码
  14. 仿QQ音乐的歌词滚动
  15. PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  16. 从业多年,谈谈差分输入电路和共模信号,差模信号关系的理解
  17. cad2016的自动修复此计算机,CAD中遇到文件损坏,别着急,这几招能帮你挽回损失...
  18. Python爬取《哆啦A梦-伴我同行2》影评,这部的寓意是啥?词云来剧透!
  19. SQL/PL SQL
  20. php v11跟v14区别,内幕剖析评测戴森v11absolute和fluffy有何区别?哪个好?亲身体验诉说...

热门文章

  1. Spring IOC 容器源码分析系列文章导读 1
  2. 每个人都该懂点的版本管理技能
  3. 实践中的电商前端优化
  4. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南
  5. 尚硅谷公开课--struts2--2--搭建struts2环境以及struts2简单例子
  6. Android 第三课 构建简单的用户界面
  7. 蚂蚁变大象:浅谈常规网站是如何从小变大的(转)
  8. AutoCAD VBA对齐对象
  9. 王者服务器维护宝箱礼包都没领,王者荣耀:S19战令最后一天,还没领取奖励的玩家要注意了...
  10. java 注解 id_java注解