73. 矩阵置零/54. 螺旋矩阵

news2024/12/23 5:55:03

73. 矩阵置零

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

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

思路:记录当前元素所在行列,然后遍历到处在该行或者该列的元素等于0。

代码:

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m=matrix.size();//矩阵行数
        int n=matrix[0].size();//矩阵列数
        vector<int> row(m),col(n);//记录0元素出现位置的行列数值
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(matrix[i][j]==0){//记录0元素出现位置的行列
                    row[i]=1;
                    col[j]=1;
                }
            }
        }
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(row[i]==1||col[j]==1){
                    matrix[i][j]=0;
                }
            }
        }
    }
};

54. 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 :

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

思路:之前做过n行n列的螺旋矩阵,解决办法就是确定边界,根据边界去调整方向。

代码随想录算法训练营第二天|977. 有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II-CSDN博客

现在m行n列也不例外,确定边界依然可以做出来。

①边界:边界有上下左右四个边界

        上边界:例如例题中,指针从1走到4,这一行就不能再走了(确保从9走到5之后不会再向上走),也就是上边界收缩了一行

        右边界:指针从8走到12,这一列就不能再走了也就是右边界收缩了一列

        剩下:左边界和下边界也是一样。

先对边界初始化,还有初始化一个结果输出数组:

       int up=0;//上
       int right=matrix[0].size()-1;//右
       int down=matrix.size()-1;//下
       int left=0;//左
       vector<int> ans;

②遍历规则:从左向右时,需要和右边界比较,需要小于等于右边界,该行元素就依次加入到答案数组中;其次该行并不是所有元素都加入,例子中,第一次是从1到4,起点是1,第二次是从6到7,5并没有加入,因为从下向上时候,5就加入了,5加入之后左边界收缩,所以每行的起始位置是左边界;最后我们需要确定是哪一行进行遍历,从例子中可以发现,其实当前遍历的正是上边界所在的一行

for(int i=left;i<=right;i++) ans.push_back(matrix[up][i]);

确定起始位置,确定结束位置,确定遍历的行或列,这个方法同样适用于其他方向的遍历规则

        for(int i=left;i<=right;i++) ans.push_back(matrix[up][i]);//从左到右
        for(int i=up;i<=down;i++) ans.push_back(matrix[i][right]);//从上到下
        for(int i=right;i>=left;--i) ans.push_back(matrix[down][i]);//从右到左
        for(int i=down;i>=up;--i) ans.push_back(matrix[i][left]);//从下到上

注意:从右到左和从下到上,i是递减的,比较也是小于等于。

确定终止条件:也就是边界碰撞的时候,需要退出,例子中,遍历完外圈元素时,上下边界收缩都等于1,当6遍历到7结束时,上边界收缩,这时候上边界大于下边界,就可以退出循环了。

最后在每次当前行或列遍历完成了,都做一次边界比较。

代码:

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
       int up=0;//上
       int right=matrix[0].size()-1;//右
       int down=matrix.size()-1;//下
       int left=0;//左
       vector<int> ans;
       if(matrix.empty()) return ans;
       while(true){
        for(int i=left;i<=right;i++) ans.push_back(matrix[up][i]);//从左到右
        up+=1;
        if(up>down) break;
        for(int i=up;i<=down;i++) ans.push_back(matrix[i][right]);//从上到下
        right-=1;
        if(right<left) break;
        for(int i=right;i>=left;--i) ans.push_back(matrix[down][i]);//从右到左
        down-=1;
        if(down<up) break;
        for(int i=down;i>=up;--i) ans.push_back(matrix[i][left]);//从下到上
        left+=1;
        if(left>right) break;
       }
    return ans;
}
};

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

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

相关文章

OurBMC开源大赛企业获奖队伍专访来啦!

精彩纷呈的 OurBMC 开源大赛已告一段落&#xff0c;经历为期四个月的实战&#xff0c;各个参赛队伍也积淀了丰富的实践经验与参赛心得。本期&#xff0c;社区特别邀请 OurBMC 开源大赛获奖企业团队分享「走进OurBMC开源大赛&#xff0c;共同践行开放包容、共创共赢的开源精神」…

WordPress建站从入门到精通,跨境电商建站教程

详情介绍 课程内容:WordPress建站从入门到精通,跨境电商建站教程 - 百创网-源码交易平台_网站源码_商城源码_小程序源码 1-WordPress网站的优势 2-如何用Builtwith识别网站的搭建技术? 3-如何配置站长信息? 4-如何使用WordPress虚拟后台 5-如何选择一个好的网站域名?…

【Osek网络管理测试】[TG4_TC5]唤醒条件

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 验证DUT验证DUT睡眠后被唤醒&#xff0c;并再次睡眠能否…

流畅的python-学习笔记_一等函数

函数对象 函数也是对象&#xff0c;操作可像对象一般操作 高阶函数 高阶函数指接受参数为函数&#xff0c;或返回函数的函数 不少高阶函数在py3已经有了替代品。map&#xff0c; filter可通过生成式实现&#xff0c;reduce&#xff08;在functools里&#xff09;可通过sum实…

Web3智能物联网:科技连接的未来世界

在当今科技飞速发展的时代&#xff0c;Web3智能物联网正逐渐成为人们关注的焦点。随着区块链技术的不断成熟和普及&#xff0c;以及物联网的普及和应用&#xff0c;Web3智能物联网作为二者的结合&#xff0c;将为未来的数字世界带来革命性的变化。本文将深入探讨Web3智能物联网…

一文快速掌握高性能内存队列Disruptor

写在文章开头 Disruptor是英国外汇公司LMAX开源的一款高性能内存消息队列&#xff0c;理想情况下单线程可支撑600w的订单。所以本文会从使用以及设计的角度来探讨一下这款神级java消息队列。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java code…

上市企业扣非净利润是什么意思,可以反映什么问题?

扣非净利润&#xff0c;全称“扣除非经常性损益后的净利润”&#xff0c;是指企业在剔除与正常经营无关的、偶然发生的损益后所得到的利润。这些非经常性损益包括但不限于政府补贴、处置长期资产、税收返还等。 扣非净利润的计算公式为&#xff1a;扣非净利润 净利润 - 非经常…

2-手工sql注入(进阶篇) sqlilabs靶场5-10题

1. 阅读&#xff0c;学习本章前&#xff0c;可以先去看看基础篇&#xff1a;1-手工sql注入(基础篇)-CSDN博客 2. 本章通过对sqlilabs靶场的实战&#xff0c;关于sqlilabs靶场的搭建&#xff1a;Linux搭建靶场-CSDN博客 3. 本章会使用到sqlmap&#xff0c;关于sqlmap的命令&…

TC3xx MTU概述(1)

目录 1.MTU基本功能 2.MBIST 3.小结 1.MTU基本功能 在TC3xx中&#xff0c;MTU(Memory Unit Test)被用来管理控制芯片内部各种RAM的测试、初始化和数据完整性检查。 既然MTU主要是管理和控制&#xff0c;那干活的想必另有他人。所以在该平台中&#xff0c;我们可以看到SRAM…

公众号营业执照已注销,被冻结怎么换成新主体?

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;长期以来&#xff0c;由于部分公众号在注册时&#xff0c;主体不准确的历史原因&#xff0c;或者公众号主体发生合并、分立或业务调整等现实状况&#xff0c;在公众号登记主体不能对应实际运营人的情况下&#xff0…

第八篇:深入探索操作系统架构:从基础到前沿

深入探索操作系统架构&#xff1a;从基础到前沿 1 引言 在当今这个高速发展的数字时代&#xff0c;操作系统无疑是计算机科学领域的基石之一。它不仅是计算机硬件与最终用户之间的桥梁&#xff0c;更是实现高效计算和资源管理的关键。操作系统的架构&#xff0c;即其内部结构和…

企业节能降耗系统,助力企业节能降耗

随着社会的发展和能源消耗的增加&#xff0c;节能降耗已经成为企业可持续发展的重要课题。为了更有效地监测和管理能源消耗&#xff0c;越来越多的企业开始使用能耗在线监测系统。作为一种节能降耗的有力手段&#xff0c;能耗在线监测系统在企业中得到广泛应用。 能耗在线监测…

AI智能分析视频监控行业的发展趋势和市场发展浅析

监控视频AI智能分析技术的现状呈现出蓬勃发展的态势&#xff0c;这一技术源于计算机视觉和人工智能的研究&#xff0c;旨在将图像与事件描述之间建立映射关系&#xff0c;使计算机能够从视频图像中分辨出目标信息。 在技术上&#xff0c;监控视频AI智能分析技术已经实现了对视…

XAMPP是什么?XAMPP好不好用?

XAMPP是一个免费且开源的软件套件&#xff0c;用于在个人计算机上轻松搭建和运行 Apache 服务器、MySQL 数据库、PHP 和 Perl&#xff0c;让用户可以在个人电脑上搭建服务器环境的平台。 XAMPP的由来是 X(表示跨平台)、Apache、MySQL、PHP 和 Perl 的首字母缩写。 它集成了这…

【隧道篇 / WAN优化】(7.4) ❀ 02. WAN优化的作用 ❀ FortiGate 防火墙

【简介】看了上一篇文章&#xff0c;相信大家都知道了在防火墙上启动WAN优化的方法&#xff0c;但是WAN优化到底能做什么&#xff1f;相信有很多人想了解。 什么是WAN优化 现在有许多企业通过集中应用程序或在云中提供应用程序来降低成本并整合资源。应用程序在本地局域网内都能…

汇凯金业:通货膨胀对能源行业有何影响

通货膨胀对能源行业有几方面的影响&#xff0c;具体取决于通货膨胀的原因、规模以及持续时间。以下是一些可能的效应&#xff1a; 成本增加&#xff1a;通货膨胀导致能源行业的运营成本上升。这包括原材料、设备、维护和人力成本。如果企业不能完全将成本转嫁给消费者&#xf…

初学python记录:力扣1329. 将矩阵按对角线排序

题目&#xff1a; 矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线&#xff0c;沿右下方向一直到矩阵末尾的元素。例如&#xff0c;矩阵 mat 有 6 行 3 列&#xff0c;从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。 …

不必追求深度,浅尝辄止为宜

近日笔者撰文称&#xff0c;有幸应《百度-百家号》相邀&#xff0c;在其发起的《征文任务》栏目中写作深度文章&#xff0c;便试着开头写了一篇《万科有“活下去”的可能性吗&#xff1f;》的时评文章&#xff0c;于5月3日发表&#xff0c;舆情反映不错&#xff0c;不到三天时间…

万里牛ERP集成金蝶K3(万里牛主管供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件&#xff0c;它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标&#xff0c;计划与流程控制为主线&#xff0…

Jupyter配置

修改Jupyter打开界面 &#xff08;1&#xff09;打开【Anaconda Prompt】&#xff0c;输入【jupyter notebook --generate-config】命令 从运行结果可知【jupyter_notebook_config.py】的位置 &#xff08;2&#xff09;使用【记事本】打开 找到# c.NotebookApp.notebook_…