当前位置: 首页 > 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.lryc.cn/news/602276.html

相关文章:

  • 秩为1的矩阵的特征和性质
  • 青少年编程高阶课程介绍
  • 青少年编程中阶课
  • 『 C++ 入门到放弃 』- 哈希表
  • 攻防世界-引导-Web_php_unserialize
  • 《LeetCode 热题 100》整整 100 题量大管饱题解套餐 中
  • cacti的RCE
  • 关于“PromptPilot” 之3 -Prompt构造器核心专项能力:任务调度
  • keepalived原理及实战部署
  • MBR和GPT分区的区别
  • 电商项目DevOps一体化运维实战
  • 【Datawhale夏令营】端侧Agent开发实践
  • CodeBuddy的安装教程
  • JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5
  • 基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现
  • openlayer根据不同的状态显示不同的图层颜色
  • Fortran实现 3维反距离加权(IDW)插值算法
  • 初识 docker [下] 项目部署
  • ETH 交易流程深度技术详解
  • 二、Linux文本处理与文件操作核心命令
  • 从0开始学习R语言--Day60--EM插补法
  • git stash apply 冲突合并方法解决
  • Kafka 3.9.1的KRaft模式部署
  • linux系统----Ansible中的playbook简单应用
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • 【Blender小技巧】Blender使用多边形建形工具创建多边形模型,挤出面,模型创建修改编辑UV贴图
  • 【第四章:大模型(LLM)】01.神经网络中的 NLP-(2)Seq2Seq 原理及代码解析
  • 从0到500账号管理:亚矩阵云手机多开组队与虚拟定位实战指南
  • 【归并排序】排序数组(medium)
  • Rust/Tauri 优秀开源项目推荐