当前位置: 首页 > news >正文

【LeetCode】算法详解#10 ---搜索二维矩阵II

1.题目介绍

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

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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -109 <= matrix[i][j] <= 109
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -109 <= target <= 109

2. 解决思路

        一个m行n列的矩阵,要求判断其中是否存在特定值,已经知道了这个矩阵的特点:从左向右依次增大,从上至下依次增大。最容易想到的做法就是直接遍历,但时间复杂度为m*n,或者是对每一行采用二分查找,时间复杂度为mlogn。题目要求采用一个高效的方法,那么现在观察矩阵的特点,对于一个元素[x][y],一定有:在他同行左侧的元素比他小,在他同列下侧的元素一定比他大。根据这个规律,我们可以从右上角开始,通过不断判断目标值与当前位置的大小关系,并不断改变坐标来寻找是否元素存在。如果索引越界,则表示元素不存在。

3.步骤讲解

        1.定义变量m表示矩阵行数,n表示矩阵列数

        2.定义变量x,y,表示元素索引,从矩阵右上角开始

        3.当元素索引不越界时,即x<m且y>=0时,进行循环查找

        4.如果目标值等于当前值时,返回true

        5.如果目标值大于当前值,将行索引+1,与较大值匹配。反之将列索引-1,与较小值比较

        6.循环退出时,也就是索引越界时,则表示元素不存在,返回false

4.代码展示

public static boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;//从右上角开始int x = 0;int y = n-1;//索引不越界时while (x < m && y >= 0){//如果目标值匹配,返回trueif (target == matrix[x][y]){return true;}//如果目标值大于当前值,则向下查找,反之向左查找if (target > matrix[x][y]){x++;}else {y--;}}return false;}

5.执行结果

 

 在leetcode中测试用例平均耗时6ms

      

 内存分布45.16MB

http://www.dtcms.com/a/302138.html

相关文章:

  • React 项目中使用 Redux 实现公共状态共享
  • 从 WAIC 2025 的火爆,看 AI 时代视频“入口层”的技术演进
  • flink yarn 问题排查
  • [VLDB 2025]面向Flink集群巡检的交叉对比学习异常检测
  • 数据驱动与智能重构:定制开发开源AI智能名片S2B2C商城小程序对数字营销话语权的重塑
  • Spring ai 调用大模型
  • 盲盒抽卡机小程序系统开发:连接线上线下娱乐新桥梁
  • uniapp 更新apk有缓存点不动,卸载安装apk没有问题。android
  • 小程序组件的生命周期,以及在小程序中进行接口请求的方法设置
  • 网络编程概述与UDP编程
  • 【esp32s3】7 - VSCode + PlatformIO + Arduino + 构建项目
  • 基于神经网络的手写数字识别系统
  • 【论文阅读53】-CNN-LSTM-滑坡风险随时间变化研究
  • 【论文阅读】Safety Alignment Should Be Made More Than Just a Few Tokens Deep
  • cacti的RCE
  • 计算机视觉---Halcon概览
  • 实用工具类分享:BeanCopyUtils 实现对象深浅拷贝高效处理
  • 墨者:SQL手工注入漏洞测试(MySQL数据库-字符型)
  • haproxy实列
  • 开源AI智能体-JoyAgent集成Deepseek
  • AI论文阅读方法+arixiv
  • 元宇宙工厂前端新形态:Three.js与WebGL实现3D产线交互的轻量化之路
  • 使用std::transform实现并发计算
  • Java 开发新人,入职后的环境搭建和配置
  • 安宝特方案丨AI算法能力开放平台:适用于人工装配质检、点检、实操培训
  • Netty中trySuccess和setSuccess的区别
  • python-内存管理
  • 【FAQ】MS Dynamics 365 Sales配置方法汇总
  • Linux中应用程序的安装于管理
  • Java面试宝典:Spring Boot