leetcode—搜索二维矩阵II

编写一个高效的算法来搜索 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

方法一

暴力求解

class Solution {public boolean searchMatrix(int[][] matrix, int target) {// 方法一 :暴力求解// 遍历数组for(int i = 0; i < matrix.length; i++){for(int j = 0; j < matrix[0].length; j++){if(matrix[i][j] == target){return true;}}}// 若遍历完数组还是没有找到目标值 返回falsereturn false;}
}

方法二

对矩阵的每一行采用二分查找进行查找

class Solution {public boolean searchMatrix(int[][] matrix, int target) {// 遍历矩阵的第一层 即每一行 使用增强for循环for(int[] row: matrix){int index = binarySearch(row, target);if(index >= 0){return true;}}return false;}// 二分查找public int binarySearch(int[] matrix, int target){int left = 0;int right = matrix.length -1;while(left <= right){int mid = (left + right)/2;if(matrix[mid] == target){return mid;}else if(matrix[mid] > target){right = mid -1;}else{left = mid + 1; }}// 若还未找到 返回-1return -1;}
}

方法三

Z字型查找

从矩阵的右上角(0,n-1)进行搜索

具体过程. - 力扣(LeetCode)

  • 若matrix[x,y] == target,返回true
  • 若 matrix[x,y] > target,  那么第y 列的所有元素都是大于target的 因此 y--
  • 若matrix[x,y] < target,    那么第 x 行的所有元素都小于target, 因此x++    
class Solution {public boolean searchMatrix(int[][] matrix, int target) {// 数组判空if(matrix.length == 0){return false;}int m = matrix.length;  // 计算矩阵的行数int n = matrix[0].length;   // 计算矩阵的列数// 从右上角开始查找int x = 0;int y = n-1;// 循环查找while(x < m && y >= 0){if(matrix[x][y] == target){return true;}else if(matrix[x][y] > target){// 消去列y--;}else{// 消去行x++;}}// 若循环结束 还未找到 返回falsereturn false;}
}

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

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

相关文章

springboot(ssm校园便利平台 校园跑腿管理系统Java系统

springboot(ssm校园便利平台 校园便利店管理系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; …

【计算机网络】网络层——详解IP协议

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 &#x1f431;一、I…

JavaScript三元运算的基本语法是什么?

JavaScript中的三元运算是一种简洁的if-else表达方式&#xff0c;其基本语法如下&#xff1a; condition ? exprIfTrue : exprIfFalse其中&#xff0c;condition是一个返回值为布尔类型的表达式&#xff0c;exprIfTrue和exprIfFalse是在条件为真或假时执行的表达式。如果cond…

第29集《佛法修学概要》

丁三、声闻乘 分二&#xff1a;戊一、释义&#xff1b;戊二、四谛法&#xff1b;戊三、结示 请大家打开讲义第八十二页。我们看丁三&#xff0c;声闻乘。 在祖师大德的判教当中&#xff0c;把我们整个大乘的成佛之道分成了三个部分&#xff1a;第一个是安乐道&#xff0c;第…

【链路层】点对点协议 PPP

目录 1、PPP协议的特点 2、PPP协议的组成和帧格式 3、PPP协议的工作状态 目前使用得最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol)。 1、PPP协议的特点 我们知道&#xff0c;互联网用户通常都要连接到某个 ISP 才能接入到互联网。PPP 协议就是用户计算机…

全罐喂养是什么意思?适合猫咪全罐喂养的猫罐头推荐

猫咪全罐喂养的风一直挺大的&#xff0c;但是有好多养猫人一直不知道全罐喂养是什么意思&#xff0c;作为铲龄6年的宠物店店长&#xff0c;从早几年就开始全罐喂养了&#xff0c;对各个品牌的猫罐头也都很熟悉。 作为铲屎官&#xff0c;我们都想要给我猫猫吃的更好&#xff0c…

排序算法-希尔排序(含C语言代码示例)

一、算法介绍 希尔排序是一种基于插入排序的高效、不稳定的排序算法&#xff0c;它通过对待排序序列进行一系列间隔划分的子序列排序来改进插入排序的性能。该算法的基本思想是先将整个序列分割成若干个子序列&#xff0c;然后分别对各个子序列进行插入排序。这一过程通过逐渐减…

Redis面试题17

Redis 是如何处理并发访问的&#xff1f;有没有并发控制机制&#xff1f; 答&#xff1a;Redis 是单线程的&#xff0c;它使用了基于事件驱动的模型来处理并发访问。Redis 使用一个主事件循环来监听并处理客户端的连接和操作请求。 对于并发访问&#xff0c;Redis 使用了以下几…

openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c

文章目录 openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c概述笔记END openssl3.2 - 官方demo学习 - signature - rsa_pss_hash.c 概述 对私钥对明文做签名(摘要算法为SHA256) 用公钥对密文做验签(摘要算法为SHA256) 笔记 /*! \file rsa_pss_hash.c \note openss…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-16 Robust Controller非线性鲁棒控制器

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-16 Robust Controller非线性鲁棒控制器 1. Slide Control 滑膜控制2 High Gain High Frequency3. 三种鲁棒控制器的比较如何分析控制器 Robust Control : tp achieve rob…

基于云平台技术的GPS定位的浅谈

基于云平台技术的GPS定位的创新主要体现在以下几个方面&#xff1a; 数据存储和处理&#xff1a;云平台可以提供大规模的数据存储和计算资源&#xff0c;能够实时处理大量的GPS定位数据&#xff0c;提高了定位系统的处理能力和响应速度。 动态扩展性&#xff1a;云平台的弹性伸…

鸿蒙开发笔记(九):渲染控制,if/else,ForEach,LazyForEach

ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外&#xff0c;还可以使用渲染控制语句来辅助UI的构建&#xff0c;这些渲染控制语句包括控制组件是否显示的条件渲染语句&#xff0c;基于数组数据…

【代码随想录05】242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

目录 242.有效的字母异位词题目描述做题思路参考代码 349. 两个数组的交集题目描述做题思路参考代码 202. 快乐数题目描述做题思路参考代码 1.两数之和题目描述参考代码 242.有效的字母异位词 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字…

父组件中 arr.push改变数组,但是子组件监听不到 arr 的变化

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.真是奇怪呀&#xff0c;一般来说通过 push方法改变 数组&#xff0c;是一定会有响应式的&#xff0c;那就可以监听到变化。但是我今天却遇到了一件奇怪的事情。在…

k8s创建资源对象过程

我们都知道&#xff0c;K8S中一切皆资源&#xff0c;在使用K8S时&#xff0c;所有的pod或者controller都是通过yaml文件进行创建的。 那么接下来&#xff0c;就和大家一起看一下K8S是如何创建资源的。 创建资源对象的过程 Deployment是一种常见的资源对象。在Kubernetes系统…

pytorch学习(一)、tensorboard和torchvision

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、os模块二、from torch.utils.data import Dataset三、from torch.utils.tensorboard import SummaryWriter四、from torchvision import transforms五、torchvi…

JS数据的扁平化处理

1.纯数组扁平化 // 给定的数组 const arr [1, [2, [3, 4, [5], 6], 7], 8, [9, [10, 11], 1], 2];// 定义一个函数&#xff0c;用于将嵌套数组展平为一维数组 function flattenArray(obj [], res []) {// 如果输入为空数组&#xff0c;直接返回空数组if (!obj) return;// 遍…

高精度算法笔记·····························

目录 加法 减法 乘法 除法 高精度加法的步骤&#xff1a; 1.高精度数字利用字符串读入 2.把字符串翻转存入两个整型数组A、B 3.从低位到高位&#xff0c;逐位求和&#xff0c;进位&#xff0c;存余 4.把数组C从高位到低位依次输出 1.2为准备 vector<int> A, B, …

考研机试题收获——高精度进制转换

代码的第一遍真的很重要&#xff0c;在第一次打的时候尽量把问题思考全面&#xff0c;不要漏打少打&#xff0c;尽量不要留bug给之后de。 一、基础方面 一、处理输出的结束问题 scanf和cin默认都不会读取空格 ①scanf()&#xff1a;如果从文件中读取数据&#xff0c;当scanf()…

小红书达人投放策略分析,品牌方必看

小红书已经成为品牌营销的重要战场&#xff0c;达人投放作为小红书营销的核心环节&#xff0c;其策略的精准与否直接关系到营销效果的好坏。本文伯乐网络传媒将对小红书达人投放的重要性、投放策略以及监测与优化进行深入探讨&#xff0c;以期为品牌提供更具实操性的营销建议。…