leetcode 240. 搜索二维矩阵 II-java题解

news2024/12/27 1:46:36

题目所属分类

从右上角出发往下遍历 倒是也可以二分

原题链接

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

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

代码案例:在这里插入图片描述

输入: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

题解

从右上角出发,初始化i = 0,j = m - 1

1、若matrix[i][j] == target,返回true
2、若matrix[i][j] > target,向左走,j --
3、若matrix[i][j] < target,向下走,i ++
4、如果出界,返回false
时间复杂度O(n + m )

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int n = matrix.length ;
        int m = matrix[0].length ;
        if(n == 0 || m == 0) return false;
        int i = 0 , j = m -1 ;
        while(i <  n && j >= 0){
            int t = matrix[i][j] ;
            if(t == target) return true;
            if(t < target) i ++ ;
            else j-- ;
        }
        return false ;
    }
}

还可以二分
二分

枚举每一行,由于每一行都是升序的,对每一行通过二分找到 小于等于 target 的最大值,若存在某一行中matrix[i][l] == target,则直接返回true,否则返回false

时间复杂度 O(nlogm)

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix.length == 0 || matrix[0].length == 0) return false;
        int n = matrix.length;
        int m = matrix[0].length;
        for(int i = 0;i < n;i ++)
        {
            int l = 0, r = m - 1;
            while(l < r)
            {
                int mid = l + r + 1 >> 1;
                if(matrix[i][mid] <= target) l = mid;
                else r = mid - 1;
            }
            if(matrix[i][l] == target) return true;
        }
        return false;
    }
}


 

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

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

相关文章

加解密与HTTPS(4)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 在互联网应用中&#xff0c;安全性问题已经越来越突出。从DDoS攻击、矿机劫持、乌云事件&#xff08;白帽子变成黑帽子&#xff09;&#xff0c;到窃听、偷拍、强…

Word控件Spire.Doc 【Table】教程(1):在 Word 中创建表格-C#VB.NET

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

spring源码-资源资源加载器

Spring资源抽象Resource Spring对各种底层资源,比如文件系统中的一个文件&#xff0c;classpath上的一个文件&#xff0c;或者一个网络URL&#xff0c;统一抽象为接口Resource来表示 因为每个底层文件都可以以一个只读InputStream的方式打开&#xff0c;所以Resource接口继承…

ModuleNotFoundError: No module named ‘cs231n‘

在colab上完成cs231n的作业时发现&#xff0c;报了No module named cs231n’这个错误&#xff0c;查询后也没有找到合适的答案 仔细检查&#xff0c;发现是没有找到assignment1下的cs231n文件夹&#xff0c;然后去网站核对视频教程&#xff0c;发现没有搞错&#xff0c;视频中…

浮点数的储存

浮点数的储存一.浮点数的三段式&#xff08;S,E,M&#xff09;1.如何放入2.如何取出二.为什么浮点数不能直接比较三.解释第一个问题我们都知道整形在内存中是按照补码的形式储存的&#xff0c;但是浮点数的储存却和整数的截然不同&#xff0c;浮点数没有所谓是原反补并且浮点数…

SSM框架学习记录-MyBatisPlus_day01

1.入门案例与简介 MybatisPlus是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在简化开发、提供效率 未使用MybatisPlus时&#xff0c;在dao接口中的代码如下&#xff1a; Mapper public interface UserDao {Select("select * from user where id#{id}")publ…

冬日宅家选哪款投影仪比较好?极米H5陪你温暖过冬天

随着室外温度的逐步下降&#xff0c;寒冬也真的来了。相信对于许多朋友来说&#xff0c;宅家是冬季最惬意的时光&#xff0c;就是开着空调、电暖风、暖气&#xff0c;在温暖的室内&#xff0c;再打开投影仪&#xff0c;用超大屏追剧、看看电影&#xff0c;听听美妙的音乐&#…

光伏二次设备概述

概述 分布式光伏发电项目一般根据并网的电压等级分为380V和10KV。一般电压等级为380V低压并并网基本不涉及到什么二次产品&#xff0c;通常采用光伏并网柜就能解决&#xff0c;常见的并网设备为防孤岛保护装置和电能质量在线监测装置为主。而10KV并网的光伏容量一般处于1MWP到1…

加强企业数据库安全的行为准则

现在大多数企业都拥有可靠的网络安全程序&#xff0c;这些程序利用多种控件来实现深度防御安全性。通过这些程序&#xff0c;企业服务器得到加固&#xff0c;企业端点得到保护&#xff0c;监控工具也得以部署。还能够消除来自端点设备的高度敏感信息&#xff0c;并整合企业系统…

基于jsp+sevlet+mysql实验室设备管理系统

基于jspsevletmysql实验室设备管理系统一、系统介绍二、功能展示1.通知公告(学生)2.实验设备借用申请(学生)3.设备借用记录(学生)4.实验室预约申请(老师)5.实验室预约记录(老师)6.实验设备借用申请(老师)7.设备借用记录(老师)8.通知公告(管理员)9.实验室管理(管理员)10.设备管理…

QA | 关于可编程信号发生器,您在使用中可能遇到的问题

Q1&#xff1a;为什么信号源插在电脑上会显示电压不足&#xff1f; A&#xff1a;通常需要比普通电脑USB接口能提供更大的功率&#xff0c;需要高达2.0A的电流&#xff0c;超出了许多老式 USB 端口的水平。可以通过多种方式满足这一要求。适配器、USB 3.0计算机/笔记本电脑端口…

python——Matplotlib之fill_between函数

Matplotlib是Python提供的一套基于NumPy的绘图工具包&#xff0c;用Python实现与MATLAB相似的命令API&#xff0c;十分适合交互式绘制图表&#xff0c;成为Python中应用非常广的绘图工具包之一。 在对数据可视化时&#xff0c;为了突出某一段数据需要对部分区域进行填充处理。…

用这4招优雅的实现Spring Boot 异步线程间数据传递

Spring Boot 自定义线程池实现异步开发相信看过文章都了解&#xff0c;但是在实际开发中需要在父子线程之间传递一些数据&#xff0c;比如用户信息&#xff0c;链路信息等等 比如用户登录信息使用ThreadLocal存放保证线程隔离&#xff0c;代码如下&#xff1a; /*** author 公…

认监委调整《有机产品认证目录》

认监委关于调整《有机产品认证目录》的公告为进一步完善有机产品认证制度&#xff0c;规范有机产品认证活动&#xff0c;促进有机产业发展&#xff0c;根据《有机产品认证管理办法》&#xff08;质检总局令第155号&#xff09;和《有机产品认证实施规则》&#xff08;认监委201…

大数据编程期末大作业

大数据编程期末大作业 文章目录大数据编程期末大作业一、Hadoop基础操作二、RDD编程三、SparkSQL编程四、SparkStreaming编程一、Hadoop基础操作 在HDFS中创建目录 /user/root/你的名字 例如李四同学 /user/root/lisi 首先我们需要启动hdfs&#xff0c;我们直接在终端输入如下命…

JavaScript for 循环

文章目录JavaScript for 循环JavaScript 循环使用for循环不同类型的循环For 循环语句 1语句 2语句 3For/In 循环JavaScript for 循环 循环可以将代码块执行指定的次数。 JavaScript 循环 如果您希望一遍又一遍地运行相同的代码&#xff0c;并且每次的值都不同&#xff0c;那么…

MCU-51:单片机DS18B20温度报警器

目录一、DS18B201.1 DS18B20介绍1.2 引脚及应用电路1.3 内部结构框图1.4 存储器结构二、单总线2.1 单总线介绍2.2 单总线电路规范2.3 单总线时序结构三、DS18B20操作流程四、DS18B20数据帧五、温度存储格式六、代码演示6.1 温度读取6.2 温度报警器注意&#xff1a;一定要看一、…

Qt OpenGL(04)Sierpinski 镂垫 3D 版

文章目录三维 Siepinski 镂垫相关代码main.cppHelp.hppWidget.hWidget.cpp顶点着色器片元着色器总结三维 Siepinski 镂垫 把前面的二维Sierpinski程序转换成一个生成三维Sierpinski镂垫的程序&#xff0c;也就是说要绘制的镂垫不再只是限制在一个平面里。我们可仿效对二维镂垫所…

什么? @ConditionalOnMissingBean 你没设置value?

序 这两天再看 公司 之前写的组件的代码&#xff0c;不看不知道&#xff0c;一看吓一跳。。。。这里就说其中一个 不知道你在写组件中的 Bean 加载的时候 怎么写&#xff1f; 方法一 直接META-INF/spring.factories 写 org.springframework.boot.autoconfigure.EnableAuto…

消息队列应用与原理剖析

什么是消息队列 消息队列&#xff1a;在消息的传输过程中保存消息的容器&#xff0c;生产者和消费者不直接通讯&#xff0c;依靠队列保证消息的可靠性&#xff0c;避免了系统间的相互影响。系统间的数据流通道 应用场景 异步处理&#xff1a;用户注册后&#xff0c;需要发注…