leetcode 73 Set Matrix Zeros 矩阵置零

2024-01-13 11:58
文章标签 leetcode set 73 矩阵 matrix zeros

本文主要是介绍leetcode 73 Set Matrix Zeros 矩阵置零,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

leetcode 73 Set Matrix Zeros
原题链接 https://leetcode.com/problems/set-matrix-zeroes/

题目描述

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
m x n的数组,如果某元素是0,则将其所在的行和列的所有元素置零。

题目中给出了要求,Did you use extra space?

  • A straight forward solution using O(mn) space is probably a bad idea.
    使用另一个m*n的数组,不好
  • A simple improvement uses O(m + n) space, but still not the best solution.
    使用大小为m+n的额外空间,还不是最优解
  • Could you devise a constant space solution?
    能否用常量级的空间来解决?

关于不好的解法

显然题目要求中指明了三中解法,其中前两种均为不好的解法。不过我们这里还是简单说一下。

使用O(m*n)空间的解法
  • 假设原始数据为X[m][n],复制一份数据到Y[m][n]
  • 然后遍历Y,根据其中的元素来对X中的元素进行置零。

空间复杂度O(m*n);对于时间复杂度,复制需要O(m*n),然后遍历Y并处理X是O(m*n*(m+n))。可见空间复杂度和时间复杂度都不好。

使用O(m+n)空间的解法
  • 使用数组X[m]来记录某一列是否需要置零,用Y[n]来记录某一行是否需要置零
  • 遍历原始数据,如果某一元素为0,则修改X和Y中相应的标记位
  • 遍历X,如果标记为真则对原始数据中的相应进行置零
  • 遍历Y,如果标记为真则对原始数据中的相应进行置零

这个算法的空间复杂度为O(m+n),时间复杂度O(m*n)。

这篇关于leetcode 73 Set Matrix Zeros 矩阵置零的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601382

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否