LeetCode 热门100题-搜索二维矩阵 II

ops/2025/2/28 22:12:29/

题目描述:

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

逻辑:(人家说的好,用人家的)
若使用暴力法遍历矩阵 matrix ,则时间复杂度为 O(NM) 。暴力法未利用矩阵 “从上到下递增、从左到右递增” 的特点,显然不是最优解法。

如下图所示,我们将矩阵逆时针旋转 45° ,并将其转化为图形式,发现其类似于 二叉搜索树 ,即对于每个元素,其左分支元素更小、右分支元素更大。因此,通过从 “根节点” 开始搜索,遇到比 target 大的元素就向左,反之向右,即可找到目标值 target 。

“根节点” 对应的是矩阵的 “左下角” 和 “右上角” 元素,本文称之为 标志数 ,以 matrix 中的 左下角元素 为标志数 flag ,则有:

若 flag > target ,则 target 一定在 flag 所在 行的上方 ,即 flag 所在行可被消去。
若 flag < target ,则 target 一定在 flag 所在 列的右方 ,即 flag 所在列可被消去。
算法流程:
矩阵 matrix 左下角元素(索引设为 (i, j) )开始遍历,并与目标值对比:
当 matrix[i][j] > target 时,执行 i-- ,即消去第 i 行元素。
当 matrix[i][j] < target 时,执行 j++ ,即消去第 j 列元素。
当 matrix[i][j] = target 时,返回 true ,代表找到目标值。

作者:Krahets
链接:https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf/
来源:力扣(LeetCode)

---------------------------------------------------------------------------------------------------------------------------------

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if (matrix.empty() || matrix[0].empty()) {return false;  // 如果矩阵为空,直接返回 false}int m = matrix.size();int n = matrix[0].size();// 从右上角开始int row = 0;int col = n - 1;while (row < m && col >= 0) {if (matrix[row][col] == target) {return true;  // 找到目标值,返回 true} else if (matrix[row][col] < target) {row++;  // 如果当前值小于目标值,向下移动到下一行} else {col--;  // 如果当前值大于目标值,向左移动到前一列}}return false;  // 如果遍历完矩阵后还没找到目标值,返回 false}
};


 


http://www.ppmy.cn/ops/162067.html

相关文章

自然语言处理:文本规范化

介绍 大家好&#xff01;很高兴又能在这儿和大家分享自然语言处理相关的知识了。在上一篇发布于自然语言处理&#xff1a;初识自然语言处理-CSDN博客为大家初步介绍了自然语言处理的基本概念。而这次&#xff0c;我将进一步深入这个领域&#xff0c;和大家聊聊自然语言处理中一…

首次使用WordPress建站的经验分享(一)

之前用过几种内容管理系统(CMS),如:dedeCMS、phpCMS、aspCMS,主要是为了前端独立建站,达到预期的效果,还是需要一定的代码基础的,至少要有HTML、Css、Jquery基础。 据说WordPress 是全球最流行的内容管理系统CMS,从现在开始记录一下使用WordPress 独立建站的步骤 选购…

复用时钟 重映射(Remap)

在GD32微控制器中&#xff0c;**Remap&#xff08;重映射&#xff09;**是指通过重新配置某些引脚的功能&#xff0c;将它们从默认功能切换到其他备用功能。例如&#xff0c;某些GPIO引脚可以被配置为SPI、USART、I2C等外设的信号引脚&#xff0c;或者作为普通IO使用。 ### **…

判断奇数偶数

题目描述 给定一个整数&#xff0c;判断该数是奇数还是偶数。如果 n是奇数&#xff0c;输出 odd&#xff1b;如果 n是偶数&#xff0c;输出 even。 输入格式 输入仅一行&#xff0c;一个整数 n&#xff0c;−100≤n≤100。 输出格式 输出仅一行&#xff0c;如果 n 是奇数&…

嵌入式八股文(五)硬件电路篇

一、名词概念 1. 整流和逆变 &#xff08;1&#xff09;整流&#xff1a;整流是将交流电&#xff08;AC&#xff09;转变为直流电&#xff08;DC&#xff09;。常见的整流电路包括单向整流&#xff08;二极管&#xff09;、桥式整流等。 半波整流&#xff1a;只使用交流电的正…

Qt for Android下QMessageBox背景黑色、文字点击闪烁

最近在基于Qt开发安卓应用的时候,在红米平板上默认QMessageBox出现之后,背景黑色,并且点击提示文字会出现闪烁,影响用户体验。 问题分析 1、设置QMessageBox样式,设置背景色、文字颜色,如下所示: QMessageBox {background: white;color: white; } 尝试之后,问题仍存…

DeepSeek本地搭建 和 Android

DeepSeek 搭建和 Android 文章目录 DeepSeek 搭建和 Android一、前言二、DeepSeek 本地环境ollama搭建1、软件下载网址&#xff1a;2、Ollama的安装3、配置算法模型和使用qwen2 模型使用&#xff0c; 三、Android Studio 和 DeepSeek四、其他1、Deepseek 使用小结(1) 网页版本可…

H5网页打包成安卓apk

H5网页打包成安卓apk&#xff08;H5套壳成app&#xff09;&#xff1a;https://blog.csdn.net/snows_l/article/details/140699265