专栏名称: 吴师兄学算法
和程序员小吴一起从初学者的角度学习算法,以动画的形式呈现解题的思路。每周四篇原创文章,期待你的鉴赏!
目录
相关文章推荐
新京报书评周刊  ·  从“擦边视频”​说起:​当代人的“性资本”与 ... ·  2 天前  
十点读书  ·  过了这个年龄,就该给孩子零花钱了 ·  2 天前  
河北交通广播  ·  【992 | 热点】“坏回暖来了”上热搜,咋回事? ·  2 天前  
51好读  ›  专栏  ›  吴师兄学算法

视频讲解 | 图解剑指offer:二维数组的查找

吴师兄学算法  · 公众号  ·  · 2020-01-09 12:15

正文


前几天在 B 站录制了一个 视频, 讲解剑指offer上的一道题目 二维数组的查找 ,以下为该视频的文字版讲解,感兴趣的可以 在文章 后面扫描二维码观看视频。

题目描述

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

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。

  • 每列的元素从上到下升序排列。

示例:

现有矩阵 matrix 如下:

[
  [1,   4,  71115],
  [2,   5,  81219],
  [3,   6,  91622],
  [1013141724],
  [1821232630]
]

给定 target = 5 ,目标值 5 在这个数组中,返回 true 即可。

给定 target = 20 ,目标值 20 不在这个数组中,需要返回 false

题目分析

这个二维数组是有特点的:

  • 每一行都是 递增

  • 每一列都是 递增

首先,我们初始化一个指向矩阵右上角的 元素

从这个元素开始查找,如果这个元素比 target 大,则说明需要找更小的,往左走;如果这个元素比 target 小,则说明应该找更大的,往下走。

视频讲解

代码实现

//@author:程序员小吴
public class Solution {
  public boolean Find(int target, int [][] array) {
    //边界条件判断
    if (array == null || array.length == 0 ||
      array[0] == null || array[0].length == 0)
      return false;
    //获取函数矩阵的行数 m 与列数 n
    int






请到「今天看啥」查看全文