首页 > 编程语言 >10.25算法

10.25算法

时间:2023-10-25 11:11:07浏览次数:37  
标签:10.25 示例 int 解决方案 matrix 算法 size

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

 

示例 1:


输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:


输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
 

提示:

m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
 

进阶:

一个直观的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗?

暴力求解:

class Solution { public:     void setZeroes(vector<vector<int>>& matrix) {     vector<pair<int,int>> zero_index;     for(int i=0;i<matrix.size();i++){         for(int j=0;j<matrix[i].size();j++){             if(matrix[i][j] == 0 ){                 zero_index.push_back(make_pair(i,j));             }         }     }     for(auto x:zero_index){         for(int i=0;i<matrix[0].size();i++){             matrix[x.first][i] = 0;         }         for(int i=0;i<matrix.size();i++){             matrix[i][x.second] = 0;         }     }     } };       bool firstColHasZero = false;     bool firstRowHasZero = false;     for(int i=0;i<matrix[0].size();i++){         if(matrix[0][i] == 0){             firstRowHasZero = true;             break;         }     }
    for(int i=0;i<matrix.size();i++){         if(matrix[i][0] == 0){             firstColHasZero = true;             break;         }     }
    for(int i=1;i<matrix.size();i++){         for(int j=1;j<matrix[0].size();j++){             if(matrix[i][j] == 0){                 matrix[0][j] = 0;                 matrix[i][0] = 0;             }         }     }
    for(int i=1;i<matrix[0].size();i++){         if(matrix[0][i] == 0){             for(int j=1;j<matrix.size();j++){                 matrix[j][i] = 0;             }         }     }
    for(int i=1;i<matrix.size();i++){         if(matrix[i][0] == 0){             for(int j=1;j<matrix[0].size();j++){                 matrix[i][j] = 0;             }         }     }
    if(firstColHasZero){         for (size_t i = 0; i < matrix.size(); i++)         {             matrix[i][0] = 0;         }     }
    if(firstRowHasZero){         for (size_t i = 0; i < matrix[0].size(); i++)         {             matrix[0][i] = 0;                     }     }     关键: 1.暴力算法记录0的index,去让这一行和这一列为0 2.原地算法,第一行和第一列记录有0的位置,然后处理所有行列,最后处理第一行列为0的情况

标签:10.25,示例,int,解决方案,matrix,算法,size
From: https://www.cnblogs.com/minipython-wldx/p/17786680.html

相关文章

  • 使用BBP算法计算π,Python实现
     BBP算法(Bailey-Borwein-Plouffe算法)是一种用于计算π的算法,它可以直接计算出π的十六进制表示的任意一位。BBP算法由SimonPlouffe于1995年提出,基于DavidBailey和PeterBorwein在1995年的工作。BBP算法的基本思想是使用级数展开,将π表示为一个无限级数的和。具体来说,BBP算法......
  • KMP算法【字符串搜索算法】
    KMP算法1.算法核心利用匹配失败后的信息尽量减少模式串(B)与主串(A)的匹配次数以达到快速匹配的目的通过一个next数组,保存模式串(B)中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省去了大量的计算时间2.如何减少匹配次数2.1.字符串的前缀和后......
  • 文心一言 VS 讯飞星火 VS chatgpt (120)-- 算法导论10.3 5题
    五、用go语言,设L是一个长度为n的双向链表,存储于长度为m的数组key、prev和next中。假设这些数组由维护双链自由表F的两个过程ALLOCATE-OBJECT和FREE-OBJECT进行管理。又假设m个元素中,恰有n个元素在链表L上,m-n个在自由表上。给定链表L和自由表F,试写出一个过程......
  • 安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也支持提供AI算力算法接入的能力。今天我们......
  • 安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法
    安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也支持提供AI算力算法接入的能力。今天......
  • 浅谈排序网络与并行排序算法
    对于普通的基于比较排序我们拥有一个复杂度下界\(O(n\logn)\),然而如果我们允许并行计算的话,将得到一些复杂度更优秀的计算方法。听到并行这个词许多人就会认为你有几个线程复杂度就除以几,所以线程堆得越多越好。但许多的算法问题都必须要满足你必须要算完A才能去计算B,比如对......
  • C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例
    相关源码测试用例下载包括4个压缩包,初始代码,实现前缀和,实现前缀积,实现前缀异或。都是在前者的基础上修改的。原理长度为n的数组nums,共有n+1个以nums[0]开始的子数组。索引范围分别为[0,i),i取值区间[0,n]。preSum[i]记录子数组[0,i)的和。比如:nums={1,2,3,4},则preSum={0,1,3,6......
  • C++前缀和算法应用:和至少为 K 的最短子数组的原理、源码及测试用例
    题目给你一个整数数组nums和一个整数k,找出nums中和至少为k的最短非空子数组,并返回该子数组的长度。如果不存在这样的子数组,返回-1。子数组是数组中连续的一部分。示例1:输入:nums=[1],k=1输出:1示例2:输入:nums=[1,2],k=4输出:-1示例3:输入:nums=......
  • C++前缀和算法:构造乘积矩阵
    题目给你一个下标从0开始、大小为n*m的二维整数矩阵grid,定义一个下标从0开始、大小为n*m的的二维矩阵p。如果满足以下条件,则称p为grid的乘积矩阵:对于每个元素p[i][j],它的值等于除了grid[i][j]外所有元素的乘积。乘积对12345取余数。返回grid的乘积......
  • C++算法:二叉树的序列化与反序列化
    #题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列/反序列化算法执行逻......