剑指 Offer 04. 二维数组中的查找解题思路

news2024/11/22 14:41:12

文章目录

  • 标题
  • 解题思路
    • 优化

标题

在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例:

现有矩阵 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。

给定 target = 20,返回 false。

限制:

0 <= n <= 1000

0 <= m <= 1000

解题思路

在这里插入图片描述

观察矩阵特点,发现可以在第一行中找到最后一个小于等于该数的位置,在该列中查找,同理找到第一列中最后一个小于等于该数的位置,在该行查找、如果都不存在,那么在小于x,y范围内查找。

public bool FindNumberIn2DArray(int[][] matrix, int target)
		{
            if(matrix.GetLength(0) == 0|| target == null || matrix[0].GetLength(0) == 0)return false;
			int x = 0 , y = 0;
			for(int i = 0 ; i < matrix[0].GetLength(0); i++)//1维长度
			{
				if(matrix[0][i] <= target)
				{
					x = i;
				}
			}
			for(int i = 0 ; i < matrix.GetLength(0); i++)//0维长度
			{
				if(matrix[i][x] == target)
					return true;
			}
			
			for(int i = 0 ; i < matrix.GetLength(0); i++)//0维长度
			{
				if(matrix[i][0] <= target)
				{
					y = i;
				}
			}
			for(int i = 0 ; i < matrix[0].GetLength(0); i++)//1维长度
			{
				if(matrix[y][i] == target)
					return true;
			}
            for(int i = 0 ; i <= y; i++)//在x,y内找
			{
				for(int j = 0; j <= x ; j++)
				{
					if(matrix[i][j] == target)
					return true;
				}
			}
			return false;
		}

在这里插入图片描述

优化

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

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

相关文章

ARM-伪操作

目录 协处理器指令 伪操作 安装交叉编译工具 Makefile 进入命令&#xff1a;vi ASM-ARM.s 宏定义 make之后查看ASM-ARM.dis反汇编文件 预编译指令 申请一个字的空间 .word 申请多个字节空间 嵌套编程 方式一&#xff1a;汇编跳转到C 方式二&#xff1a;C跳转到汇编 方式三&…

2023/5/30面试小结

一、本应会但并不会的题 1.用js写一个栈 class Stack {constructor() {this.items [];}// 添加元素到栈顶push(element) {this.items.push(element);}// 移除栈顶元素并返回pop() {return this.items.pop();}// 返回栈顶元素peak() {return this.items[this.items.length - …

HashMap有哪些线程安全的处理方式(面试题)

HashMap有哪些线程安全的处理方式&#xff08;面试题&#xff09; 概念1. synchronizedMap(Map<K,V> m)2. ConcurrentHashMapConcurrentHashMap Jdk1.7 vs Jdk1.8 概念 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作&#xff0c;并允许使用 null 值和 null…

数字孪生3D可视化技术在数字化水利行业中的应用

城市供水数字孪生系统是一种基于web3d开发和数字孪生技术构建的智能运维系统&#xff0c;它可以将实际设备与虚拟模型相结合&#xff0c;实现对城市供水系统的实时监测、预测和优化。 智慧供水系统是智慧水务建设的新目标与新高度&#xff0c;能够实现城市内部原水供水以及污水…

ASEMI单向可控硅BT169D参数,BT169D规格,BT169D大小

编辑-Z 单向可控硅BT169D参数&#xff1a; 型号&#xff1a;BT169D 断态重复峰值电压VDRM&#xff1a;600V 平均通电电流IT(AV)&#xff1a;0.6A R.M.S通电电流IT(RMS)&#xff1a;0.8A 通态浪涌电流ITSM&#xff1a;10A 平均栅极功耗PG(AV)&#xff1a;0.1W 峰值门功率…

Curl【实例 01】curl下载使用及cmd实例脚本分享(通过请求下载文件)

Curl 官方下载地址 可下载不同平台不同版本的安装包。 这里写目录标题 1.是什么1.1 curl1.2 bat和cmd 2.常用命令2.1 发送GET请求并显示响应头信息2.2 显示详细的请求和响应信息2.3 限制重定向次数2.4 带Json数据的Post请求发送2.5 带文件的Post请求发送2.6 使用代理服务器发送…

付费订阅故事难讲,腾讯音乐如何“过河”?

作者 | 艺馨 豆乳拿铁 排版 | Cathy 监制 | Yoda 出品 | 不二研究 腾讯音乐如何“过河”&#xff1f; 近日&#xff0c;腾讯音乐娱乐集团&#xff08;下称“腾讯音乐”&#xff0c;01698.HK&#xff09;公布了2022全年及2023年一季度财报。 腾讯音乐是一家提供在线音乐及…

使用 LangChain 和 Elasticsearch 的隐私优先 AI 搜索

作者&#xff1a;Dave Erickson 在过去的几个周末里&#xff0c;我一直在 “即时工程” 的迷人世界中度过&#xff0c;并了解像 Elasticsearch 这样的矢量数据库如何通过充当长期记忆和语义知识存储来增强像 ChatGPT 这样的大型语言模型 (LLM)。 然而&#xff0c;让我和许多其他…

波奇学STL:String入门和迭代器

目录 ​编辑 Constructor/Destructor/Operator Constructor:构造函数 Iterator:迭代器 begin()/end():迭代器像指针一样访问问函数 个人对迭代器的理解 rbegin()/rend():迭代器反向移动 除了用迭代器访问元素外string类还可以[]下标 Capacity:容量&#xff1f; s.siz…

Hystrix入门使用 服务熔断 服务降级 服务雪崩

一、概念 hystrix停止更新&#xff0c;理念优秀。 分布式系统面临的问题: 对于复杂的分布式体系&#xff0c;有数十个依赖&#xff0c;依赖不可避免的错误。 服务会出现雪崩&#xff0c;高可用受到破坏。 Hystrix就是用于解决分布式系统延迟和容错的开源库。 保证在一个依赖出…

Python五彩气球

文章目录 前言Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字 五彩气球气球类漂浮函数气球函数六一祝福 尾声 前言 六一要来啦&#xff0c;快来领取博主精心准备的五彩气球吧&#xff01; Turtle基础 小海龟(Turtle)是Python中画图的一…

SpringBatch历史数据的清理方案及实现

SpringBatch历史数据的清理方案及实现 需求背景 SpringBatch的程序已经运行了将近一年&#xff0c;数据量已经达到了一定的数据量级别。 对SpringBatch历史数据的清理也被提上日程。 但是SpringBatch的代码中似乎没有找到清理历史数据的代码&#xff0c;在官方文档中也没有…

一、STM32程序下载软件_FlyMCU

1、软件简介 (1)FlyMCU是一款STM32下载程序的软件。 (2)FlyMCU采用ISP下载方式。 (3)ISP&#xff1a;在线系统编程。 (4)FlyMCU支持STM32F1、STM32F2、STM32F4系列&#xff0c;其他暂不支持&#xff0c;后续应该也不会更新了。 (5)STM32芯片的ISP下载&#xff0c;只能使用…

LINUX系统编程-----中

文章目录 进程间的通信管道popen 和 pclosepipeFIFO 共享内存system V 版本的共享内存创建/获取共享内存 共享内存涉及的函数共享内存的通信两个进程同时对共享内存进行读写 信号量使用信号量保护共享资源消息队列死锁 信号内核不可中断状态 进程间的通信 管道 在操作系统中&…

【备战秋招】每日一题:4月1日美团春招(二批)第三题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

Electron简单开发

文章目录 1.参考网站2.HelloWold编写2.1新建空文件夹2.2node初始化2.3安装electron依赖2.4添加.gitignore 文件2.5创建main.js文件和index.html2.6运行electron应用 3.打包 接到一个任务&#xff0c;将electron集成到solidworks中&#xff0c;所以记录一下electron的简单操作&a…

【操作系统】05.文件管理

文件管理 文件的属性 文件内部数据的组织 文件之间的组织 操作系统向上层提供功能 创建文件 删除文件 打开文件 关闭文件 读文件 写文件 文件的逻辑结构 无结构文件 有结构文件 顺序文件 文件的物理结构 磁盘块&#xff08;文件块&#xff09; 连续分配 优点 对于机…

操作系统 四、文件管理

文章目录 4.1 文件的逻辑结构4.2 文件目录4.2.1 目录结构4.2.1.1 单级目录结构4.2.1.2 两级目录结构4.2.1.3 多级目录结构4.2.1.4 无环图目录结构 4.2.2 索引结点(FCB的改进) 4.3 文件的物理结构4.3.1 连续分配4.3.2 链接分配4.3.2.1 隐式链接4.3.2.2 显式链接 4.3.3 索引分配 …

稠密点云获取方法(二)

作为高分辨率三维重建的方法之一,从单张图像生成稠密三维点云在计算机视觉领域中一直有着较高的关注度。 以下文献提出了一种针对二维和三维信息融合的方法以解决三维点云稀疏难以检测远处的目标的问题。 Multimodal Virtual Point 3D Detection 该文献提出一种将 RGB 传感器…

【Mysql】| 超详细常见bug及解决方案

目录 一. &#x1f31f; 引入话题二. &#x1f31f; 引出bug1.1 查看bug1.2 Problem Solving2.1 查看bug2.2 Problem Solving3.1 字段长度异常3.2 Problem Solving 三. &#x1f31f; 最后 一. &#x1f31f; 引入话题 MySQL是一款广泛使用的开源数据库管理系统&#xff0c;它…