LeetCode Hot 100:矩阵

力扣hot100第21题:搜索二维矩阵IIpython实现 编写一个高效的算法来搜索m x n矩阵matrix中的一个目标值target。truefalse。 阅读详情

LeetCode Hot 100:矩阵

73. 矩阵置零

思路 1:辅助数组

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m = matrix.size(), n = m ? matrix[0].size() : 0;
        vector<int> row(m, false), col(n, false);
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                if (matrix[i][j] == 0) {
                    row[i] = true;
                    col[j] = true;
                }

        for (int i = 0; i < m; i++)
            if (row[i] == true)
                for (int j = 0; j < n; j++)
                    matrix[i][j] = 0;
        for (int j = 0; j < n; j++)
            if (col[j] == true)
                for (int i = 0; i < m; i++)
                    matrix[i][j] = 0;
    }
};

思路 2:常量额外空间

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m = matrix.size(), n = m ? matrix[0].size() : 0;
        int flag_col0 = false, flag_row0 = false;
        for (int i = 0; i < m; i++)
            if (matrix[i][0] == 0)
                flag_col0 = true;

        for (int j = 0; j < n; j++)
            if (matrix[0][j] == 0)
                flag_row0 = true;

        for (int i = 1; i < m; i++)
            for (int j = 1; j < n; j++)
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }

        for (int i = 1; i < m; i++)
            for (int j = 1; j < n; j++)
                if (matrix[i][0] == 0 || matrix[0][j] == 0)
                    matrix[i][j] = 0;

        if (flag_col0)
            for (int i = 0; i < m; i++)
                matrix[i][0] = 0;

        if (flag_row0)
            for (int j = 0; j < n; j++)
                matrix[0][j] = 0;
    }
};

54. 螺旋矩阵

思路 1:模拟

class Solution {
private:
    // 向右、向下、向左、向上
    vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        // 特判
        if (matrix.empty())
            return {};

        int m = matrix.size(), n = matrix[0].size();
        vector<int> ans(m * n, 0);
        vector<vector<bool>> visited(m, vector<bool>(n, false));
        int r = 0, c = 0;
        int dirIdx = 0;
        for (int i = 0; i < m * n; i++) {
            ans[i] = matrix[r][c];
            visited[r][c] = true;
            int nextRow = r + directions[dirIdx][0],
                nextColumn = c + directions[dirIdx][1];
            // 遇到边界,转向
            if (nextRow < 0 || nextRow >= m || nextColumn < 0 ||
                nextColumn >= n || visited[nextRow][nextColumn])
                dirIdx = (dirIdx + 1) % 4;
            r += directions[dirIdx][0];
            c += directions[dirIdx][1];
        }

        return ans;
    }
};

思路 2:模拟

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        // 特判
        if (matrix.empty())
            return {};

        int m = matrix.size(), n = m ? matrix[0].size() : 0;
        vector<int> ans(m * n, 0);
        int index = 0;
        // 边界标记
        int left = 0, right = n - 1;
        int top = 0, bottom = m - 1;
        
        while (index < m * n) {
            // 向右
            for (int i = left; i <= right && index < m * n; i++)
                ans[index++] = matrix[top][i];
            top += 1;
            // 向下
            for (int i = top; i <= bottom && index < m * n; i++)
                ans[index++] = matrix[i][right];
            right -= 1;
            // 向左
            for (int i = right; i >= left && index < m * n; i--)
                ans[index++] = matrix[bottom][i];
            bottom -= 1;
            // 向上
            for (int i = bottom; i >= top && index < m * n; i--)
                ans[index++] = matrix[i][left];
            left++;
        }

        return ans;
    }
};

48. 旋转图像

思路 1:原地模拟

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        // 特判
        if (n == 1)
            return;

        for (int i = 0; i < n / 2; i++) {
            for (int j = 0; j < (n + 1) / 2; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - j - 1][i];
                matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
                matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
                matrix[j][n - i - 1] = temp;
            }
        }
    }
};

240. 搜索二维矩阵 II

思路 1:从左下角开始

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if (matrix.empty())
            return false;

        int m = matrix.size(), n = m ? matrix[0].size() : 0;
        int i = m - 1, j = 0;

        while (i >= 0 && j < n) {
            if (matrix[i][j] == target)
                return true;
            else if (matrix[i][j] > target)
                i--;
            else
                j++;
        }
        
        return false;
    }
};

思路 2:从右下角开始

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if (matrix.empty())
            return false;

        int m = matrix.size(), n = m ? matrix[0].size() : 0;
        int i = 0, j = n - 1;

        while (i < m && j >= 0) {
            if (matrix[i][j] == target)
                return true;
            else if (matrix[i][j] > target)
                j--;
            else
                i++;
        }

        return false;
    }
};
力扣hot100第19题:螺旋矩阵python 给你一个m行n列的矩阵matrix,请按照,返回矩阵中的所有元素。 阅读详情

相关推荐

力扣hot100第18题:矩阵置零python

给定一个m x n的矩阵,如果一个元素为,则将其所在行和列的所有元素都设为。请使用算法。

weixin_74009895的博客 67

力扣hot100:矩阵:54.螺旋矩阵

1

2401_83606094的博客 580

Python地理空间数据库之geopandas使用详解

地理空间数据分析在许多领域中都有着广泛的应用,包括地理信息系统(GIS)、城市规划、环境科学、地质勘探等。Python GeoPandas是一个强大的库,旨在简化地理空间数据的处理和分析。本文将深入介绍GeoPandas库,包括其基本概念、功能特性、示例代码以及在实际应用中的应用场景。

Rocky006的博客 1万+

前端力扣刷题 | 6:hot100之 矩阵

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

2502_90366796的博客 2075

视频预处理--经典方法卷积3D

在三维卷积操作中,卷积核不仅在空间维度上滑动,还在时间维度上滑动,从而同时捕捉时间和空间上的特征。通过合理设置步长和填充,可以灵活控制输出特征图的大小和特征提取的效果。你的理解非常准确:三维卷积核就像是一个长度为 3 的滑动窗口,每次选取 3 个连续的帧进行卷积操作,而步长和填充则进一步优化了这一过程。

m0_73359068的博客 1649

别再只会按按钮了!用NanoStat开源项目学ESP32硬件设计:BOOT与自动下载电路的避坑指南

本文通过NanoStat开源项目深入解析ESP32硬件设计中BOOT与自动下载电路的关键技术。从启动机制、电路设计陷阱到三极管选型,提供了一套完整的避坑指南和优化方案,帮助开发者提升设计可靠性和烧录效率。特别适合中级开发者学习ESP32硬件设计的精髓。

weixin_30296405的博客 439

力扣hot100:搜索二维矩阵

二分查找返回的是目标值最先出现的位置或者是在有序数组中的插入位置,如果是在有序数组中的插入位置则可能为在数组最后一个位置加一个数,这是如果进行matrix[i][weizi]==target的判断的话会导致数组越界,必须先处理越界问题,最终判断条件应为weizi<matrix[i].length&&matrix[i][weizi]==target。本题的本质是一个查找算法,为了提高性能可以使用二分查找,这个二维矩阵可以看出许多个数组,只需要对每个数组都进行一次二分查找就可以实现查找整个二维矩阵。

一本大学生java学习技术分享与交流 409

RK3588 平台部署实战:OpenCV + LibTorch + FFmpeg 环境搭建与深度学习推理全流程解析

现在,你已经掌握了在RK3588上搭建OpenCV+LibTorch+FFmpeg环境的完整流程,也完成了深度学习模型的部署测试。不妨从一个具体的应用场景入手(如检测自家宠物的品种),亲手打造属于你的第一个边缘智能应用——当你看到模型在RK3588上精准输出结果时,你会发现:嵌入式深度学习的门槛,其实并没有想象中那么高。这些依赖是编译OpenCV、FFmpeg的基础,安装过程中若提示权限不足,可在命令前加。若能输出预测的类别索引,则说明环境搭建成功,模型推理流程通畅。文件,实现模型加载、图像预处理与推理。

FJN110的博客 535

leetcode hot100 矩阵:螺旋矩阵

/ 边界判断:如果当前行索引已超出上边界(上边界随圈数收缩:0 + circle),则退出整个循环。// 调整位置:到达上边界后,行索引下移一位(避免越界),列索引右移一位(准备下一圈的右遍历)// 调整位置:到达右边界后,列索引左移一位(避免越界),行索引下移一位(准备向下遍历)// 调整位置:到达下边界后,行索引上移一位(避免越界),列索引左移一位(准备向左遍历)// 调整位置:到达左边界后,列索引右移一位(避免越界),行索引上移一位(准备向上遍历)// 从上到下遍历,行索引递增,直到触及下边界。

2401_82379797的博客 545

华为OD机试 - 最佳对手(Python/JS/C/C++ 2025 A卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。游戏里面,队伍通过匹配实力相近的对手进行对战。但是如果匹配的队伍实力相差太大,对于双方游戏体验都不会太好。给定n个队伍的实力值,对其进行两两实力匹配,两支队伍实例差距在允许的最大差距d内,则可以匹配。要求在匹配队伍最多的情况下,匹配出的各组实力差

学Java,找哪吒 1379

基于SpringBoot 3 + Vue 3的全栈民宿预约管理系统设计与实现

文章将详细阐述系统的需求分析、架构设计、数据库设计、核心功能模块的实现(包括用户认证、房源管理、订单流程、支付集成等),并提供关键代码片段,最后对系统进行总结与展望。.requestMatchers("/api/admin/**").hasRole("ADMIN") // 管理员接口。.requestMatchers("/api/auth/**").permitAll() // 认证接口公开。.requestMatchers("/api/public/**").permitAll() // 公开资源。

2201_76125393的博客 272

LeetCode HOT100刷题笔记(三):子串,矩阵

ps:笔记和代码按本人理解整理,重思路

学习记录 1266

cesium加载geotiff的 四种方法

本文介绍了在Cesium中加载GeoTIFF数据的两种主要方法。首先解析了核心前置知识,包括坐标系匹配、数据类型区分和性能优化。方法1详细演示了如何将RGB影像GeoTIFF转换为Cesium影像图层,包含从数据解析到Canvas转换的完整代码流程。方法2则针对高程数据(DEM)处理,展示了前端直接解析构建地形网格的方案。文章提供了完整的代码示例和关键实现要点,适用于卫星影像、专题图和数字高程模型等多种GeoTIFF数据类型在三维场景中的可视化需求。

大剑师兰特的GIS世界 395

力扣HOT100之矩阵:54. 螺旋矩阵

他的思路比较朴素,就是按照。的顺序遍历矩阵,然后将遍历到的元素添加到数组中,但是这个思路中是遍历一条边后就立刻更新对应的边界,例如,刚刚把上边界的所有元素添加到数组后,就立刻将上边界+1,然后遍历右边的边时,右边是直接从更新后的上边界为起点开始遍历的(这就意味着在同一圈中,上边界添加的元素一定比下边界添加的多,右边界添加的元素一定比左边界添加的多),另外,只要当前的下标值。),如果出现了这样的情况,就说明已经打印完了所有元素,无需再继续遍历,直接退出当前的循环。在退出循环之后,直接返回数组即可。

weixin_52151595的博客 563

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

力扣HOT100之二分查找:74. 搜索二维矩阵

将每一行的第一个元素当作一个数组中的元素,然后对这个数组进行二分查找,如果直接找到了。才进行进一步的搜索,当遍历完整层都没有找到时,返回。所以我们需要判断一下退出二分查找后的。所在的位置,此时我们应当去上一层(,此时我们应当去上一层(,此时我们无法去上一层(,否则退出循环的时候。为61,则退出循环时。

weixin_52151595的博客 873

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

力扣HOT100之矩阵:73. 矩阵置零

置为0,经过一次遍历后,除了第0行和第0列的情况没有统计出来,其余的行和列都已经遍历结束并且打上标签,由于打标签会向第0行和第0列添加0,打完标签后无法判断其本身原本就包含0,因此在遍历矩阵打标签之前,我们需要遍历矩阵的第0行和第0列,如果他们本身就有0,我们就分别用两个变量记录下来,至此,我们先分别遍历了矩阵的第0行和第0列,再遍历了矩阵的其余行和列,这就遍历了一次矩阵,我们再遍历一次矩阵,从下标为1的行和列开始,对于matrix[i][j],如果。我们可以将第0行和第0列作为记录的标志位,例如。

weixin_52151595的博客 374

力扣hot100:矩阵:48.旋转图像

4

2401_83606094的博客 313

力扣hot100:搜索二维矩阵与在排序数组中查找元素的第一个和最后一个位置(74,34)

二分查找算法在有序数据中的高效应用 本文展示了两种使用二分查找算法解决有序数据结构问题的经典方法。第一种是二维矩阵搜索,通过两次二分(先定位行后定位列)将时间复杂度优化到O(logm + logn);第二种是查找目标值的范围,通过两次变种二分(分别找左右边界)高效确定首次和末次出现位置。两种方法都充分利用了数据的有序特性,通过调整搜索边界的方向,在O(logn)时间内完成搜索任务。文中详细分析了算法思路、边界处理技巧和实现细节,并提供了完整的代码示例,是掌握二分查找变种应用的优秀范例。

ze15829163918的博客 1261

leetcode-hot100-矩阵:73矩阵置零-54螺旋矩阵-48旋转图像-240搜索二维矩阵

矩阵:73矩阵置零-54螺旋矩阵-48旋转图像-240搜索二维矩阵

XSYaaaaan的博客 265

力扣hot100:739. 每日温度/54. 螺旋矩阵

如果我们记住四个顶点,则我们就有足够信息可以使得我们无差错的转一圈。并且转完这一圈,四个顶点更新为内层的四个顶点是非常简单的。,我们可以直接按螺旋顺序遍历螺旋矩阵,然后在原矩阵中直接标记被遍历的位置。矩阵,从外到内分层,则有每次都是转一圈。如果需要原地进行,空间复杂度且需要是。经典单调栈问题,求下一个更大的数。,则需要进行层序遍历。

m0_63997099的博客 1758

leetcode hot100 矩阵:旋转图像

/ j只到i为止,因为当j >= i时,[i][j]和[j][i]的交换会重复之前的操作。// 内层循环:遍历当前行中"行索引大于列索引"的元素(避免重复交换)// 交换[i][j]和[j][i]的元素,实现行与列的转换。// 第二步:反转每一行的元素(将每行从左到右的顺序反转)// 定义左右指针,l从行首开始,r从行尾开始。// 左指针右移,右指针左移,缩小范围。// 交换当前行中l和r位置的元素。// 当左指针在右指针左边时,持续交换。// 外层循环:遍历每一行,i表示当前行索引。

2401_82379797的博客 448

力扣HOT100之矩阵:48. 旋转图像

这道题本来想用剥洋葱的办法的,一直写不对,放弃了。直接去看题解,用剥洋葱其实也可以做,就是要从外层处理到内层,每一个边界上的元素为matrix[0].size() - 1个,这样一来,四条边界上的元素个数都相同,然后直接狂用swap函数交换就完事了,但是我看评论区还有更加简洁的办法,就是通过找规律可以看出来,,我想了一下,剥洋葱还是有点太麻烦了,然后就直接用这个简单的思路,代码也很好写。

weixin_52151595的博客 389

LeetCode Hot 100系列:螺旋矩阵(Q54)

54.螺旋矩阵。

m0_73965192的博客 1331

力扣HOT100之矩阵:240. 搜索二维矩阵 II

的题解,感觉两位大佬的思路都很相近,只不过一个从矩阵的右上角开始比较,一个从矩阵的左下角开始比较,这里我就主要讲一下Krahets的思路,还挺通俗易懂的。这道题直接暴力AC的,虽然也能过,但是耗时太长了,AC之后看了下灵神和Krahets。我们直接找到矩阵最左下角的元素,假设为。列可以直接舍弃,因为第。列可以直接舍弃,因为第。时终止搜寻,直接返回。

weixin_52151595的博客 344

LeetCode hot100:054 螺旋矩阵:螺旋矩阵遍历全攻略

摘要:本文介绍了两种解决螺旋矩阵遍历问题的方法。边界收缩法通过定义上下左右四个边界,按照顺时针方向依次遍历并收缩边界,时间复杂度O(mn),空间复杂度O(1)。方向模拟法则使用方向数组和访问标记来模拟螺旋过程,时间复杂度O(mn),但需要O(mn)额外空间存储访问状态。其中边界收缩法更为推荐,因其逻辑清晰且空间效率高。文章详细说明了算法的核心思路、实现步骤和边界处理技巧,适用于各种矩阵规模的螺旋遍历需求。

m0_62396717的博客 323
上一篇: LeetCode Hot 100:双指针
下一篇: LeetCode Hot 100:普通数组
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值