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

每日一题——搜索二维矩阵

搜索二维矩阵

    • 一、题目背景
    • 二、题目描述
      • 示例 1:
      • 示例 2:
      • 约束条件:
    • 三、解题思路分析
      • 1. **错误思路回顾**
      • 2. **Z字形查找算法**
        • 算法步骤:
      • 3. **算法优势**
    • 四、代码实现
      • 代码说明:
    • 五、测试用例
      • 测试用例 1:
      • 测试用例 2:
      • 测试用例 3:
    • 六、总结

一、题目背景

在LeetCode上,有一道经典的二维矩阵搜索问题——“搜索二维矩阵 II”。题目要求在一个具有特定性质的二维矩阵中查找目标值。矩阵的每一行从左到右升序排列,每一列从上到下升序排列。我们需要设计一个高效的算法来判断目标值是否存在于矩阵中。

二、题目描述

给定一个二维矩阵matrix和一个目标值target,矩阵的行数为m,列数为n。矩阵满足以下性质:

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

我们需要判断目标值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

约束条件:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 300
  • -10^9 <= matrix[i][j] <= 10^9
  • 每一行的所有元素从左到右升序排列
  • 每一列的所有元素从上到下升序排列
  • -10^9 <= target <= 10^9

三、解题思路分析

1. 错误思路回顾

在解题过程中,我们可能会尝试一些直观的思路,但这些方法往往效率低下或存在逻辑错误。例如,从矩阵的左上角开始逐行逐列搜索,或者在矩阵中随机选择一个起点进行搜索。这些方法的时间复杂度较高,无法满足题目对效率的要求。

2. Z字形查找算法

经过分析,我们发现一种高效的搜索方法——Z字形查找。这种方法利用了矩阵的有序性,从矩阵的右上角(或左下角)开始搜索,通过逐步调整搜索范围,快速定位目标值。

算法步骤:
  1. 初始化:从矩阵的右上角开始搜索,设当前坐标为(x, y),其中x = 0y = n - 1
  2. 搜索过程
    • 如果matrix[x][y] == target,说明找到了目标值,返回true
    • 如果matrix[x][y] > target,由于每一列是升序排列的,当前列的所有元素都大于目标值,因此将y减1,即向左移动。
    • 如果matrix[x][y] < target,由于每一行是升序排列的,当前行的所有元素都小于目标值,因此将x加1,即向下移动。
  3. 边界条件:如果搜索过程中超出矩阵的边界(x >= my < 0),说明目标值不存在,返回false

3. 算法优势

Z字形查找算法充分利用了矩阵的有序性,避免了不必要的搜索。其时间复杂度为O(m + n),其中m是矩阵的行数,n是矩阵的列数。相比暴力搜索(时间复杂度为O(m * n)),这种方法效率显著提高。

四、代码实现

以下是基于Z字形查找算法的C语言实现:

bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int m = matrixSize;       // 矩阵的行数int n = *matrixColSize;   // 矩阵的列数int x = 0, y = n - 1;     // 从右上角开始搜索while (x < m && y >= 0) { // 确保搜索范围在矩阵内if (matrix[x][y] == target) { // 找到目标值return true;} else if (matrix[x][y] > target) { // 当前值大于目标值,向左移动y--;} else { // 当前值小于目标值,向下移动x++;}}return false; // 超出矩阵边界,目标值不存在
}

代码说明:

  1. 初始化x为0,y为矩阵的列数减1,即从右上角开始。
  2. 循环条件x < my >= 0,确保搜索范围在矩阵内。
  3. 搜索逻辑
    • 如果当前值等于目标值,直接返回true
    • 如果当前值大于目标值,向左移动(y--)。
    • 如果当前值小于目标值,向下移动(x++)。
  4. 返回结果:如果超出矩阵边界仍未找到目标值,返回false

五、测试用例

测试用例 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

测试用例 3:

matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]
target = 7

输出true

六、总结

通过Z字形查找算法,我们能够高效地解决“搜索二维矩阵 II”问题。这种方法充分利用了矩阵的有序性,避免了暴力搜索的低效性。在实际应用中,我们还可以根据矩阵的性质选择其他优化策略,例如从左下角开始搜索,逻辑与从右上角类似。
这题本质上就是从右上角往右下角遍历,还是比较容易的。

相关文章:

每日一题——搜索二维矩阵

搜索二维矩阵 一、题目背景二、题目描述示例 1&#xff1a;示例 2&#xff1a;约束条件&#xff1a; 三、解题思路分析1. **错误思路回顾**2. **Z字形查找算法**算法步骤&#xff1a; 3. **算法优势** 四、代码实现代码说明&#xff1a; 五、测试用例测试用例 1&#xff1a;测试…...

PPT 小黑第21套

对应大猫22 动作按钮 “转到首页” 编号从1开始显示&#xff0c;点设计 -幻灯片大小 -修改幻灯片编号起始值为0&#xff08;那么第二张幻灯片页码为1&#xff09;...

大模型day01自然语言+大模型+环境

[TOC]大模型day01 自然语言处理 汉字的词是连着的&#xff0c;所以需要一个汉语处理模块&#xff0c;把词语、成语自动加空格隔开。 知识图谱构建——>从大语言文本挖掘出来 自然语言处理&#xff1a;翻译、智能语音 自然语言处理&#xff1a;理解一句话意思&#xff0c…...

VSTO(C#)Excel开发3:Range对象 处理列宽和行高

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

【2025】Electron + React 架构筑基——从零到一的跨平台开发

引言 源代码仓库&#xff1a; Github仓库【electron_git】 你是否厌倦了在命令行中反复输入git status&#xff0c;却依然无法直观看到文件变化&#xff1f; 是否羡慕VS Code的丝滑Git集成&#xff0c;却苦恼于无法定制自己的专属工具&#xff1f; 本专栏将为你打开一扇新的…...

AWS 如何导入内部SSL 证书

SSL 证书的很重要的功能就是 HTTP- > HTTPS, 下面就说明一下怎么导入ssl 证书,然后绑定证书到ALB. 以下示例说明如何使用 AWS Management Console 导入证书。 从以下位置打开 ACM 控制台:https://console.aws.amazon.com/acm/home。如果您是首次使用 ACM,请查找 AWS Cer…...

清华北大推出的 DeepSeek 教程(附 PDF 下载链接)

清华和北大分别都有关于DeepSeek的分享文档&#xff0c;内容非常全面&#xff0c;从原理和具体的应用&#xff0c;大家可以认真看看。 北大 DeepSeek 系列 1&#xff1a;提示词工程和落地场景.pdf  北大 DeepSeek 系列 2&#xff1a;DeepSeek 与 AIGC 应用.pdf  清华 Deep…...

【空地协同技术教程:概念与技术手段解析】

空地协同技术教程&#xff1a;概念与技术手段解析 一、空地协同的概念与核心价值 定义 空地协同&#xff08;Air-Ground Collaboration&#xff09;是指通过无人机&#xff08;UAV&#xff09;与无人车&#xff08;UGV&#xff09;等异构平台的跨域协作&#xff0c;利用各自的…...

【2025小黑课堂】计算机二级WPS精选系列20G内容(可下载:真题+预测卷+软件+选择题)

2025年3月全国计算机等级考试即将于3月29日至31日举行。为了帮助广大考生高效备考&#xff0c;小编特意收集并整理了最新版&#xff08;备考2025年3月&#xff09;的小黑课堂计算机二级WPS 电脑题库软件&#xff0c;助力考生在考试中游刃有余&#xff0c;轻松通关&#xff01; …...

蓝桥杯备赛:炮弹

题目解析 这道题目是一道模拟加调和级数&#xff0c;难的就是调和级数&#xff0c;模拟过程比较简单。 做法 这道题目的难点在于我们在玩这个跳的过程&#xff0c;可能出现来回跳的情况&#xff0c;那么为了解决这种情况&#xff0c;我们采取的方法是设定其的上限步数。那么…...

kotlin高级用法总结

Kotlin 是一门功能强大且灵活的编程语言&#xff0c;除了基础语法外&#xff0c;它还提供了许多高级特性&#xff0c;可以帮助你编写更简洁、高效和可维护的代码。以下是 Kotlin 的一些高级用法&#xff0c;涵盖了协程、扩展函数、属性委托、内联类、反射等内容。 协程&#x…...

transformers - AWQ

本文翻译整理自&#xff1a;https://huggingface.co/docs/transformers/main/en/quantization/awq 文章目录 一、引言二、加载 autoawq 量化的模型三、Fused modules支持的架构不受支持的架构 四、ExLlamaV2五、CPU 一、引言 Activation-aware Weight Quantization (AWQ) 激活…...

mysql下载与安装、关系数据库和表的创建

一、mysql下载&#xff1a; MySQL获取&#xff1a; 官网&#xff1a;www.mysql.com 也可以从Oracle官方进入&#xff1a;https://www.oracle.com/ 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 选择对应的版本和对应的操作系统&#xff…...

在华为设备上,VRRP与BFD结合使用可以快速检测链路故障并触发主备切换

在华为设备上&#xff0c;VRRP与BFD结合使用可以快速检测链路故障并触发主备切换。以下是VLAN接口下配置VRRP与BFD的步骤&#xff1a; 目录 1. 配置BFD会话 2. 配置VLAN接口 3. 配置VRRP 4. 验证配置 5. 保存配置 1. 配置BFD会话 在两台设备之间配置BFD会话&#xff0c;…...

RK3588开发笔记-fiq_debugger: cpu 0 not responding, reverting to cpu 3问题解决

目录 前言 一、FIQ Debugger介绍 二、rockchip平台配置方法 三、问题分析定位 IRQF_NOBALANCING 的含义 总结 前言 在进行 RK3588 开发的过程中,我们可能会遇到各种棘手的问题。其中,“fiq_debugger: cpu 0 not responding, reverting to cpu 3” 这个错误出现在RK3588的…...

新能源汽车充电综合解决方案:安科瑞电气助力绿色出行

安科瑞 华楠 18706163979 随着新能源汽车的迅猛发展&#xff0c;充电基础设施的建设成为了推动行业进步的关键。然而&#xff0c;充电技术滞后、运营效率低下、车桩比失衡等问题&#xff0c;依然困扰着广大车主和运营商。今天&#xff0c;我们要为大家介绍一款新能源汽车充电…...

大语言模型进化论:从达尔文到AI的启示与展望

文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…...

Spring Boot与Axon Framework整合教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 Axon Framework是一个用于构建CQRS&#xff08;命令查询职责分离&#xff09;和事件溯源&#xff08;Event Sourcing&#xff09;应用的框架&#xff0…...

深度学习Dropout

一、概念 Dropout是为了解决过拟合&#xff0c;当层数加深&#xff0c;就有可能过拟合&#xff0c;这个时候模型太复杂就会过拟合&#xff0c;那么可以让模型变得简单一点&#xff0c;所以就可以随机挑一些神经元&#xff0c;让某些神经元的输出是0&#xff0c;只保留部分神经…...

2025华为OD机试真题E卷 - 螺旋数字矩阵【Java】

题目描述 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:给出数字个数 n (0 < n ≤ 999)和行数 m(0 < m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,…,n,最终形成一个 m 行矩阵。小明对这个矩阵有些要求: 1、…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...