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

74.搜索二维矩阵

1.题目描述

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104

2.解题思路

首先通过二分查找找到target可能所在的行,找到满足首个元素< target的最后一行,因为只有最后一行是可能含有target的,例如[[1,2,3,4],[5,6,7,8]] target  = 7, 这两行首个元素都小于target,那么第一行的最后一个元素肯定是小于第二行的第一个元素的,因为第二行的第一个元素也小于target,所以target只可能出现在第二行中,因此我们只需要找到符合行首元素小于target的最后一行,然后再在这一行中使用二分查找找target即可,找到了就返回true,找不到就返回false

3.代码实现

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;int row_l = 0, row_r = m - 1;//首先找到target所在行while (row_l < row_r) {int row_mid = row_l + (row_r - row_l) / 2 + 1;if (target < matrix[row_mid][0]) {row_r = row_mid - 1;} else {row_l = row_mid;}}if (row_l < 0 || row_l >= m) {return false;}//row_l即为target可能位于的行int l = 0, r = n - 1;while (l <= r) {int mid = l + (r - l) / 2;if (matrix[row_l][mid] > target) {r = mid - 1;} else if (matrix[row_l][mid] < target) {l = mid + 1;} else {return true;}}return false;}
}


http://www.mrgr.cn/news/15234.html

相关文章:

  • 排序算法见解(2)
  • 【Rust练习】10.元组
  • HarmonyOS(52) 使用安全控件SaveButton保存图片
  • Git之1.5版本重要特性及用法实例(五十三)
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • python发送电子邮件:SMTP服务器配置步骤?
  • 本地缓存Caffeine框架的学习笔记
  • 二叉搜索树(c++)
  • Oracle使用手册
  • 【大模型从入门到精通46】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流3
  • 升降梯人数统计识别摄像机
  • hive-去字符串前导0
  • jQuery基础——事件
  • 【drools】kie:官方仓库clone 遇到问题解决
  • Bytebase 2.22.2 - 允许在工作空间为群组分配角色
  • Python深浅拷贝
  • 手算神经网络MAC和FLOP
  • 在 macOS 的 VMware Fusion 上为 Ubuntu 虚拟机设置稳定的静态 IP 地址
  • Java爬虫
  • 关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)