240.搜索二维矩阵

·题目描述

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

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

示例 1:

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

示例 2:

输入: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 = 20
输出:false

·解题思路

想编写一个二维二分查找的算法,就是说将二维矩阵分为四个象限,根据中间值的大小判断要搜索的区域。但是每次对比完还需要查找余下三个象限的值,时间耗费比较多。

----如果想做该算法,需要搞清楚的事情是。当中间值   小于  target时候,需要查找的三个象限为左上、左下、右上;当中间值   大于   target  的时候,需要查找的三个象限为右上、左下、右下。

·Java代码


class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length, n = matrix[0].length;for(int i = 0; i < m ; i ++){int[] temp = matrix[i];if(find(temp, target, 0, n - 1)){return true;}}return false;}public static boolean find(int[] arr, int target, int lo, int hi ) {if(lo > hi ) return false;int mid = lo + (hi - lo ) / 2;if(arr[mid] == target){return true;}else if(arr[mid] > target){return find(arr, target, lo, mid - 1);}else{return find(arr, target, mid + 1, hi);}}
}

------耗时太长了,还不如每一行使用二分查找。但是做一点点小小的优化,只有当每一行的第一个元素   小于   target , 并且  最后一个元素   大于   target  的时候,才进行二分查找。

·Java 代码

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length, n = matrix[0].length;for(int i = 0; i < m ; i ++){int[] temp = matrix[i];if(temp[0] <= target && temp[n - 1] >= target){if(find(temp, target, 0, n - 1)){return true;}}}return false;}public static boolean find(int[] arr, int target, int lo, int hi ) {if(lo > hi ) return false;int mid = lo + (hi - lo ) / 2;if(arr[mid] == target){return true;}else if(arr[mid] > target){return find(arr, target, lo, mid - 1);}else{return find(arr, target, mid + 1, hi);}}
}

当然还有一个暴力遍历求解就不说了。

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

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

相关文章

2024-06-05 问AI: 介绍一下 SuperCLUE

文心一言 SuperCLUE是一个中文通用大模型综合性评测基准&#xff0c;旨在评估在当前通用大模型大力发展的情况下&#xff0c;中文大模型的效果情况。以下是关于SuperCLUE的详细介绍&#xff1a; 发布时间与背景&#xff1a; SuperCLUE于2023年5月9日正式发布。主要评估中文大…

宏基因组分箱(binning)|1.Metabat实战了解binning

Introduction 宏基因组学是直接从环境样本&#xff08;如土壤、水、肠道内容物等&#xff09;中回收遗传物质并进行研究的学科&#xff0c;无需对个体生物进行分离或培养。这一领域的研究为我们提供了对微生物群落多样性及其功能的深入理解。可以查看我之前写的宏基因组分析流…

汇总 |国内外医疗器械网络安全法规与标准

国内外关于医疗器械网络安全的法规和标准日益完善&#xff0c;旨在确保医疗器械在全生命周期内的网络安全&#xff0c;保障患者信息的安全和隐私&#xff0c;以及医疗器械的正常运行。不同国家和地区的法规和标准各有侧重&#xff0c;但都强调了医疗器械制造商、开发者、经营者…

Python - 深度学习系列38 重塑实体识别5-预测并行化改造

说明 在重塑实体识别4中梳理了数据流&#xff0c;然后我发现pipeline的串行效率太低了&#xff0c;所以做了并行化改造。里面还是有不少坑的&#xff0c;记录一下。 内容 1 pipeline 官方的pipeline看起来的确是比较好用的&#xff0c;主要是实现了比较好的数据预处理。因为…

Python正则表达式匹配中文:深入解析与实战应用

Python正则表达式匹配中文&#xff1a;深入解析与实战应用 在Python编程中&#xff0c;正则表达式是一种强大的工具&#xff0c;它可以用来处理和分析字符串数据。对于需要处理包含中文字符的文本数据的场景&#xff0c;掌握如何使用正则表达式匹配中文就显得尤为重要。本文将…

Solidwokrs钣金拆图之移动面命令使用技巧

Solidwokrs钣金拆图之移动面命令使用技巧 Chapter1 Solidwokrs钣金拆图之移动面命令使用技巧Chapter2 solidworks如何删除外部参考 Chapter1 Solidwokrs钣金拆图之移动面命令使用技巧 原文链接&#xff1a;https://www.sohu.com/a/441562400_728492 今天给大家介绍一个SolidW…

IO进程线程(六)进程

文章目录 一、进程状态&#xff08;二&#xff09;进程状态切换实例1. 实例1 二、进程的创建&#xff08;一&#xff09;原理&#xff08;二&#xff09;fork函数--创建进程1. 定义2. 不关注返回值3. 关注返回值 &#xff08;三&#xff09; 父子进程的执行顺序&#xff08;四&…

【Redis数据库百万字详解】数据持久化

文章目录 一、持久化1.1、什么是持久化1.2、持久化方式1.3、RDB优缺点1.4、AOF优缺点 二、RDB持久化触发机制2.1、手动触发2.2、自动触发 三、RDB持久化配置3.1、配置文件3.2、配置查询/设置3.3、禁用持久化3.4、RDB文件恢复 四、RDB持久化案例4.1、手动持久化4.2、自动持久化案…

2024第26届大湾区国际电机博览会暨发展论坛

2024第二十六届大湾区国际电机博览会 暨发展论坛 2024第26届大湾区国际电机博览会暨发展论坛 The 26th Greater Bay Area International Motor Expo and Development Forum 时间&#xff1a;2024年12月4-6日 地址&#xff1a;深圳国际会展中心&#xff08;宝安新馆&#x…

安全生产新篇章:可燃气体报警器检验周期的国家标准解读

随着工业化进程的加快&#xff0c;安全生产成为了重中之重。 可燃气体报警器作为预防火灾和爆炸事故的重要设备&#xff0c;其准确性和可靠性直接关系到企业的生产安全和员工的生命财产安全。 因此&#xff0c;国家对可燃气体报警器的检验周期有着明确的规定&#xff0c;以确…

rk3568中断irq

前言 本文记录的是在rk3568开发板通过按键中断的实验了解和学习linux中断irq 一、Linux中断简介 在单片机中,中断的过程: ①、使能中断,初始化相应的寄存器 ②、编写中断服务函数,中断发生以后相应的中断服务函数就会执行。在 Linux 内核中也提供了大量的中断相关的 API …

美洽工作台3.0,全新发布!

美洽工作台3.0&#xff0c;全新发布 想要效率翻倍&#xff0c;就要一步到位&#xff01; 工作台 3.0&#xff0c;为效率而生 1. 更丰富的外观选择&#xff0c;让界面焕然一新&#xff0c;新增导航主题色选择&#xff0c;深色 Dark、浅色 Light 随意切换 2. 自定义你的专属导…

Python 识别图片形式pdf的尝试(未解决)

想识别出pdf页面右下角某处的编号。pdf是图片形式页面。查了下方法&#xff0c;有源码是先将页面提取成jpg&#xff0c;再用pytesseract提取图片文件中的内容。 直接用图片来识别。纯数字的图片&#xff0c;如条形码&#xff0c;可识别。带中文的不可以&#xff0c;很乱。 识别…

[12] 使用 CUDA 加速排序算法

使用 CUDA 加速排序算法 排序算法被广泛用于计算应用中有很多排序算法,像是枚举排序或者说是秩排序、冒泡排序和归并排序,这些排序算法具有不同的(时间和空间)复杂度,因此对同一个数组来说也有不同的排序时间,对于大数组而言,可能会很耗时如果排序算法能用 CUDA 加速,则…

吴恩达深度学习笔记:机器学习(ML)策略(1)(ML strategy(1))1.3-1.4

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第一周 机器学习&#xff08;ML&#xff09;策略&#xff08;1&#xff09;&#xff08;ML strategy&#xff08;1&#xff09;&#xff09;1.3 单一数字评估指标&#xff08;S…

Linux|如何安装 Java

引言 Java是最受欢迎的编程语言之一&#xff0c;JVM&#xff08;Java的虚拟机&#xff09;是运行Java应用程序的运行时环境。这两个平台是许多流行软件所需的&#xff0c;包括Tomcat&#xff0c;Jetty&#xff0c;Cassandra&#xff0c;Glassfish和Jenkins。 本教程[1]将指导您…

实验名称:文件数据存储练习

一手好牌硬打。 目录 一、实验目的 二、实验环境 三、实验步骤 四、实验结果 1.图片备份 2.将文件中所有的小写字母转换成大写字母&#xff0c;将所有的大写字转换成小写字母 3.完成班级学生成绩的录入&#xff0c;并保存在csv文件中。 4.获得csv文件中的成绩&#xf…

java 若依框架使用介绍

若依框架是一个开源的后台管理系统&#xff0c;用了2周最大的感觉就是比较轻量级的&#xff0c;有多种不同的版本&#xff0c;如前后端分离、微服务、移动端版本&#xff0c;集成了简单的代码生成器&#xff0c;入门比起jeecgboot要稍微更加简单一些。 官网地址&#xff1a;ht…

2024年应用经济学、管理科学与社会国际学术会议(ICAEMSS 2024)

2024年应用经济学、管理科学与社会国际学术会议&#xff08;ICAEMSS 2024&#xff09; 会议简介 2024年应用经济学、管理科学与社会国际学术会议将聚焦应用经济学和管理科学的前沿问题&#xff0c;深入探讨社会变革中的经济管理与科学应用。参会者将分享最新研究成果&#xf…

短剧小程序App系统源码:打造个性化追剧体验

随着数字媒体的迅猛发展&#xff0c;短剧作为一种新兴的娱乐形式&#xff0c;越来越受到广大观众的喜爱。为了满足用户对短剧内容的个性化需求&#xff0c;短剧小程序App系统应运而生。本文将深入探讨短剧App源码的核心功能&#xff0c;以及如何通过多语言支持和国际支付等技术…