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

相关文章

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

哈希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