剑指 Offer 04. 二维数组中的查找(java)

news2024/11/29 10:47:15

二维数组中的查找

  • 剑指 Offer 04. 二维数组中的查找
    • 题目描述
    • 抽象 BST 解题
  • 二叉树专题

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof

题目描述

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

示例:
现有矩阵 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

抽象 BST 解题

我们可以将二维矩阵抽象成「以右上角为根的 BST」:
在这里插入图片描述
那么我们可以从根(右上角)开始搜索,如果当前的节点不等于目标值,可以按照树的搜索顺序进行:

当前节点「大于」目标值,搜索当前节点的「左子树」,也就是当前矩阵位置的「左方格子」,即 —
当前节点「小于」目标值,搜索当前节点的「右子树」,也就是当前矩阵位置的「下方格子」,即 ++

  /**
     * 抽象的 BST 
     * @param matrix
     * @param target
     * @return
     */
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if (matrix.length == 0 || matrix[0].length == 0){
            return false;
        }
        int n = matrix.length;
        int m = matrix[0].length;
        int c = m - 1;
        int r = 0;

        while (r < n && c >= 0){
            if (matrix[r][c] < target){
                r++;
            } else if (matrix[r][c] > target) {
                c--;
            }else{
                return true;
            }
        }
        return false;
    }

二叉树专题

leetcode450. 删除二叉搜索树中的节点

leetcode701. 二叉搜索树中的插入操作

leetcode98. 验证二叉搜索树

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js为啥是设计成单线程而不是多线程呢

了解这个问题之前&#xff0c;需要先了解一下以下问题&#xff1a; 什么是进程&#xff1f;什么是线程&#xff1f;二者有啥关联&#xff1f;任务队列是什么&#xff1f;宏任务&#xff1f;微任务&#xff1f;eventloop&#xff1f;为什么说js是单线程&#xff0c;为什么要设计…

UWB高精度定位标签方案,厘米级室内测距,实时人员物品位置确定

随着科技的不断进步&#xff0c;UWB技术正逐渐成为各个领域的定位解决方案的首选。其高精度、安全、实时的特性使其在安全免提访问控制、实时室内定位等应用领域发挥着重要的作用。 安全免提访问控制是目前应用UWB技术的重要领域之一。通过将UWB标签&#xff08;如手机、钥匙扣…

Django如何删除数据库表中的数据【不断积累】

这篇博客积累Django的数据库常用删除方法。 假设有表模型Author定义如下&#xff1a; class Author(models.Model):name models.CharField(max_length100)def __str__(self):return self.name01-根据记录的id号来删除指定的记录 Django 默认为每个模型添加一个名为 id 的自…

RPA赋能日化产业,实在智能广东日化共推行业数字化转型

广东日化&#xff0c;因其独特的地域、产能优势&#xff0c;成为广东制造业的支柱产业之一&#xff0c;占据了全国日化行业的半壁江山。作为本土最具影响力商会组织之一&#xff0c;广东省日化商会凝聚了一批具有影响力的日化企业&#xff0c;其经济总量、市场占有率、品牌知名…

python网站创建:初识网站(001)

1. 初识网站&#xff1a;首先来认识一下&#xff0c;前端、后端、数据库它是怎么分工合作来形成网站的 使用python创建网站之前&#xff0c;需要先稍微认识一下两个最流行python web框架&#xff1a;(Flask)和(Django) Flask是一个轻量级的框架&#xff0c;适用于比较轻巧&…

【*1900倍数遍历】CF1627 D

Problem - D - Codeforces 题意&#xff1a; 思路&#xff1a; 在枚举数列子集的gcd时&#xff0c;通常可以枚举倍数 对于这道题要注意&#xff0c;j/i的gcd要为1&#xff0c;这样才能保证i是这个子集的最大公约数 Code&#xff1a; #include <bits/stdc.h>//#define…

三菱FX3U简单工程编程

1.简单工程编程 1.1.元件 常开触点&#xff08;ld&#xff09; 选中位置&#xff0c;点击图标&#xff0c;输入软元件&#xff0c;完成添加。 选中位置&#xff0c;快捷键F5添加。 选中位置&#xff0c;输入ld 软元件添加。常闭触点&#xff08;ldi&#xff09;横线、竖线 …

红黑树增删操作详解(相信我,这次你一定会弄懂)

前言&#xff1a; 网上众多关于红黑树的讲解&#xff0c;但大多数都是重复的&#xff0c;只列出了几种简单情况&#xff0c;逻辑和思维深度都不足以解答吾之困惑。。。 直到看到张彦峰先生的 对红黑树的认识总结&#xff0c;基本可以说是集大成者&#xff0c;本文会基于…

MySQL原理探索——28 读写分离有哪些坑

在上一篇文章中&#xff0c;介绍了一主多从的结构以及切换流程。今天我们就继续聊聊一主多从架构的应用场景&#xff1a;读写分离&#xff0c;以及怎么处理主备延迟导致的读写分离问题。 我们在上一篇文章中提到的一主多从的结构&#xff0c;其实就是读写分离的基本结构了。这里…

linux环境下使用jmeter进行分布式测试

目录 1、前言 2、环境准备 3、分布式配置 总结&#xff1a; 1、前言 熟练使用jmeter进行性能测试的工程师都知道&#xff0c;jmeter的客户端性能是有点差的。这会导致一个问题&#xff0c;其客户端的性能损耗会干扰到性能测试的结果&#xff0c;而且当线程数/并发大到一定程…

我爱学QT-仿写智能家居界面 上 中 下

学习链接&#xff1a; 仿写一个智能家居界面&#xff08;上&#xff09;_哔哩哔哩_bilibili 上 给QT工程添加资源文件 在这里 然后选这个&#xff0c;choose后会有起名&#xff0c;之一千万不能是中文&#xff0c;要不就等报错吧 然后把你要添加的图片托到文件夹下&#xf…

FPGA好找工作吗?薪资待遇怎么样?

FPGA&#xff1a;即现场可编程门阵列&#xff0c;它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的&#xff0c;既解决了定制电路的不足&#xff0c;又克服了原有可编程器件门电路数有限的缺点。 FPGA太…

Codeforces round 883 div3

A. Rudolph and Cut the RopeA. Rudolph and Cut the Rope 题目大意 有 n 个钉子钉在墙上&#xff0c;第 i 个钉子被钉在离地面 ai 米高的位置&#xff0c;一根长度为 bi 米的绳子的一端被绑在它上面。所有钉子都悬挂在不同的高度上。糖果同时被绑在所有绳子的末端&#xff0…

浅谈关于智慧校园安全用电监测系统的设计

0引言 人生人身安全是大家关注的话题&#xff0c;2019年12月中国消防统计近五年发生在全国学生宿舍的火灾2314起&#xff08;中国消防2019.12.应急管理部消防救援局官方微博&#xff09;&#xff0c;违规电器是引发火灾的主因。如果在各寝室安装智能用电监测器实时监督线路参数…

【力扣算法05】之 _1911_ 最大子序列交替和- python

文章目录 问题描述示例 1示例2示例3提示 思路分析代码分析完整代码运行示例代码示例1示例2示例3 完结 问题描述 一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。 比方说&#xff0c;数组 [4,2,5,3] 的交替和为 (4 5) - (2 3) 4…

804. n的阶乘

链接&#xff1a; https://www.acwing.com/problem/content/806/ 题目&#xff1a; 输入一个整数 nn&#xff0c;请你编写一个函数&#xff0c;int fact(int n)&#xff0c;计算并输出 nn 的阶乘。 输入格式 共一行&#xff0c;包含一个整数 nn。 输出格式 共一行&#xff0c;包…

OpenCV(图像处理)-图片搜索

图片搜索 1.知识介绍2.实现流程2.1 计算特征点与描述子2.2 描述子的匹配2.3 求出单应性矩阵并画出轮廓2.4 将特征点标出 此篇博客作者仍在探索阶段&#xff0c;还有一些模糊的概念没有弄懂&#xff0c;请读者自行分辨。 1.知识介绍 Opencv进行图片搜索需要的知识有&#xff1…

多个input框或其他框的值相加之和并且处理精度问题

需求&#xff1a;实付金额不能手动输入&#xff0c;并且等于购买数量✖优惠价➖平台补贴➖店铺补贴 把需要处理的这几个框绑上change事件等于同一个方法名 change"handleChange" handleChange(value){let _this this;let isNull validatenull;_this.ruleForm.pre…

【JavaEE】项目的部署-让网络上的人都能访问你的网站

项目的部署-让网络上的人都能访问你的网站 文章目录 【JavaEE】项目的部署-让网络上的人都能访问你的网站1. 搭建环境1.1 jdk1.2 Tomcat1.2.1 上传tomcat程序1.2.2 给启动脚本加上可执行权限1.2.3 启动Tomcat1.2.4 让服务器运行8080端口的流量通过 1.3 MySQL 2. 代码修改2.1 修…

协议逆向工程(图

协议逆向工程流程图 协议状态机推断的一般示例 状态机方法时间轴