【二分查找】Leetcode 74. 搜索二维矩阵【中等】

搜索二维矩阵

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

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

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

示例 1:
在这里插入图片描述
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

解题思路1

  • 1、从矩阵的右上角开始查找。
  • 2、如果当前元素等于目标值,则返回true。
  • 3、如果当前元素大于目标值,则说明目标值在当前元素的左侧列,列索引减1。
  • 4、如果当前元素小于目标值,则说明目标值在当前元素的下方行,行索引加1。
  • 5、重复步骤2-4,直到找到目标值或者超出矩阵边界。

Java实现1

public class SearchMatrix {public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}int rows = matrix.length;int cols = matrix[0].length;int row = 0;int col = cols - 1;while (row < rows && col >= 0) {if (matrix[row][col] == target) {return true;} else if (matrix[row][col] > target) {col--;} else {row++;}}return false;}public static void main(String[] args) {SearchMatrix solution = new SearchMatrix();int[][] matrix = {{1,3,5,7},{10,11,16,20},{23,30,34,60}};int target = 34;System.out.println("Target exists: " + solution.searchMatrix(matrix, target)); // Output: true}
}

时间空间复杂度1

  • 时间复杂度:O(m + n),其中m为矩阵的行数,n为矩阵的列数。因为每次迭代都会将行索引或列索引移动一次,最多移动m + n次。

  • 空间复杂度:O(1)。

解题思路2

  • 1、首先对第一列进行二分查找,找到最后一个小于等于 target 的元素所在的行。
  • 2、在找到的行中进行二分查找,确定 target 是否在该行中。

Java实现2

public class SearchMatrix {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length; 二分查找第一列,找到最后一个小于等于 target 的元素所在的行int left = 0;int right = m - 1;while (left <= right) {int mid =  (left + right ) / 2;if (matrix[mid][0] == target) {return true;} else if (matrix[mid][0] < target) {left = mid + 1;} else {right = mid - 1;}}// 如果目标值不在矩阵的第一列,则在确定的行中继续进行二分查找if (right >= 0) {//确定搜索行数int row = right;left = 0;right = n - 1;while (left <= right) {int mid =  (left + right ) / 2;if (matrix[row][mid] == target) {return true;} else if (matrix[row][mid] < target) {left = mid + 1;} else {right = mid - 1;}}}return false;}public static void main(String[] args) {SearchMatrix solution = new SearchMatrix();int[][] matrix = {{1,3,5,7},{10,11,16,20},{23,30,34,60}};int target = 34;System.out.println("Target exists: " + solution.searchMatrix(matrix, target)); // Output: true}
}

时间空间复杂度2

  • 时间复杂度为 O(log m + log n),其中 n 是矩阵的列数,m 是矩阵的行数。
  • 空间复杂度:O(1)。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试:sleep 和 wait

一、共同点 wait(),wait(long)和sleep(long)的效果都是让当前线程暂时放弃CPU的使用权&#xff0c;进入阻塞状态 二、不同点 1、方法归属不同 sleep(long)是Thread的静态方法而wait(), wait(long)都是Object的成员方法&#xff0c;每个对象都有 2、醒来的时机不同 执行sleep(l…

Linux —— 进程控制

一、进程创建 —— fork 1.fork fork&#xff1a;在调用时&#xff0c;创建子进程&#xff0c;父进程返回子进程pid&#xff0c;子进程返回0&#xff0c;出错返回-1 头文件&#xff1a;#include<unistd.h> 2.fork函数被调用时&#xff0c;CPU做了什么&#xff1f; a…

使用SpringBoot3+Vue3开发公寓管理系统

项目介绍 公寓管理系统可以帮助公寓管理员更方便的进行管理房屋。功能包括系统管理、房间管理、租户管理、收租管理、房间家具管理、家具管理、维修管理、维修师傅管理、退房管理。 功能介绍 系统管理 用户管理 对系统管理员进行管理&#xff0c;新增管理员&#xff0c;修改…

【Leetcode】2923. 找到冠军 I

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 一场比赛中共有 n n n 支队伍&#xff0c;按从 0 0 0 到 n − 1 n - 1 n−1 编号。 给你一个下标从 0 0 0 开始、大小为 n ∗ n n * n n∗n 的二维布尔矩阵 g r i d grid gr…

【从零开始手搓12306项目】十九、增加网关模块

在train项目中增加一个maven模块gateway 在pom中增加网关依赖 gateway只有一个依赖&#xff0c;不能引入common&#xff0c;也不能引入starter-web gateway是基于netty的 在main下新建包com.jia.train.gateway.config 新建启动类GatewayApplication&#xff0c;添加并修改类…

window轻松使用k8s

Docker Desktop安装篇 1、win安装 1、下载安装包 https://www.docker.com/products/docker-desktop/ 官网下载安装包 2、配置win支持虚拟化 不勾选Hyper-V&#xff0c;它和Windows Subsystem for Linux (WSL) 是两套功能&#xff0c;这里不选他 3、安装WSL配置window支持lin…

Python可视化-matplotlib用法详解(一)

一、折线图绘制 import pandas as pds./../../data//unrate.csv unrate pd.read_csv(s) # 时间格式转换&#xff0c; unrate[DATE] pd.to_datetime(unrate[DATE]) print(unrate.head(12))DATE VALUE 0 1948-01-01 3.4 1 1948-02-01 3.8 2 1948-03-01 4.0 3 19…

企业数字化转型路径有哪些?

企业数字化转型是一个复杂而全面的过程&#xff0c;涉及到企业的多个方面&#xff0c;包括管理、运营、生产、销售等。企业数字化转型的路径可以概括为以下几个方面&#xff1a; 1、开展数字化评估 企业首先需要对自身的数字化基础水平、经营管理现状以及内外部转型资源进行全…

【C语言】每日一题,快速提升(2)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a;杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个…

性能测试 Jmeter 非 GUI 模式 -CLI 命令详解

我们在使用Jmeter做性能测试的时候&#xff0c;大部分同学用的是图形化界面进行脚本编写和执行性能测试的。但是其实真正在公司执行性能测试的时候&#xff0c;我们基本上不会用图形化界面去执行测试&#xff0c;这是因为工具渲染这些图形本身会让Jmeter结果存在很多不稳定的因…

什么样的开放式耳机好用?五大红榜超值机型力荐!

今年&#xff0c;市场上涌现出众多备受瞩目的开放式耳机产品&#xff0c;面对如此众多的选择&#xff0c;如何挑选出一款性能卓越、音质出色的开放式耳机&#xff0c;无疑成为了消费者们关注的焦点。传统的入耳式耳机虽然有其优势&#xff0c;但长时间佩戴往往会导致耳朵红肿胀…

STM32的GPIO端口的八种模式解析

目录 STM32的GPIO端口的八种模式解析 一、上拉输入模式 二、下拉输入模式 三、浮空输入模式 四、模拟输入模式 五、推挽输出模式 六、开漏输出模式 七、复用推挽输出模式 八、复用开漏输出模式 STM32的GPIO端口的八种模式解析 在学习STM32的过程中&#xff0c;GPIO端口…