首页 > 其他分享 >[LeetCode Hot 100] LeetCode73. 矩阵置零

[LeetCode Hot 100] LeetCode73. 矩阵置零

时间:2023-12-06 11:44:54浏览次数:35  
标签:LeetCode73 matrix int 矩阵 ++ Hot 100 col row

题目描述

思路一:开辟两个数组,时间复杂度O(m + n)

开辟两个数组用来记录哪些行、哪些列需要置为零。
这样时间复杂度为O(m + n)。

思路二:

原地算法:不适用额外空间或者说常数级空间来实现算法。
类似于使用set保存每行每列是否需要置零,

方法一:对应思路一

class Solution {
    public void setZeroes(int[][] matrix) {
        // m代表行,n代表列
        int m = matrix.length;
        int n = matrix[0].length;

        Set<Integer> row = new HashSet<>();
        Set<Integer> col = new HashSet<>();

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

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

方法二:对应思路2

class Solution {
    public void setZeroes(int[][] matrix) {
        // 矩阵的行记为row,矩阵的列记为col
        int row = matrix.length, col = matrix[0].length;
        // 弄两个标记位,记录第0行和第0列是否有0
        boolean rowZero = false, colZero = false;

        // 遍历矩阵
        for (int i = 0; i < row; i ++) {
            for (int j = 0; j < col; j ++) {
                if (matrix[i][j] == 0) {
                    matrix[0][j] = matrix[i][0] = 0;
                    if (i == 0) rowZero = true;
                    if (j == 0) colZero = true;
                }
            }
        } 

        // 除开第一行第一列, 将矩阵置0
        for (int i = 1; i < row; i ++) {
            for (int j = 1; j < col; j ++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
        }

        for (int i = 0; colZero == true && i < row; i ++) matrix[i][0] = 0;
        for (int j = 0; rowZero == true && j < col; j ++) matrix[0][j] = 0;
    }
}

标签:LeetCode73,matrix,int,矩阵,++,Hot,100,col,row
From: https://www.cnblogs.com/keyongkang/p/17879171.html

相关文章

  • 初中英语优秀范文100篇-018My Summer Holiday-我的暑假
    PDF格式公众号回复关键字:SHCZFW018记忆树1MyfamilyandIwenttoHongKongtospendourholidaythissummer.翻译我和我的家人这个夏天去了香港度假简化记忆香港句子结构这个句子的结构可以分为以下几部分:主语:MyfamilyandI(我和我的家人)谓语动词:went(去)宾......
  • [LeetCode Hot 100] LeetCode19. 删除链表的倒数第N个结点
    题目描述思路一:采用两次遍历第一遍遍历先获取链表的长度length第二次从dummy节点开始走length-n步然后将该节点指向下下个节点思路二:采用一次遍历设置虚拟节点dummyHead指向head设定双指针p和q,初始都指向虚拟节点dummyHead移动q,直到p与q之间相隔的元素个数为n(即q走......
  • 100MB缓存新神U!AMD锐龙7 5700X3D蓄势待发
    AMD将在2024年第一季度发布新款锐龙75700X3D,这也将是3D缓存家族最便宜的零售型号。锐龙75800X3D作为首款3D缓存处理器,一炮打响,成为主流游戏玩家的最佳选择。Zen4时代,AMD一口气推出了锐龙97950X3D/7900X3D、锐龙77800X3D,但定位和价格都更高了。AMD虽然后来增加了锐龙55600X......
  • 两台服务器千兆,交换机也是千兆,可是传输只有100mbps?
    如果您的服务器和交换机都支持千兆传输速度,但实际传输速度只有100mbps,可能有以下几个原因:网络电缆问题:请确保使用的网线是千兆以太网(GigabitEthernet)标准的,并且没有损坏或松动。有时,低质量或老化的网线可能无法支持千兆传输速度。网络适配器设置问题:确保服务器上的网络适配器已正......
  • [LeetCode Hot 100] LeetCode21. 合并两个有序链表
    题目描述思路:新建dummy去"穿针引线"新建一个dummy节点去"穿针引线"注意最后返回的是dummy.next方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this......
  • [LeetCode Hot 100] LeetCode234. 回文链表
    题目描述思路1:将值复制到数组中然后使用双指针计算链表的长度创建等长的数组将链表中的数依次放入数组中使用左右指针判断链表是否是回文链表时间复杂度:O(n)空间复杂度:O(n)思路2:快慢指针+反转链表用快慢指针,快指针走两步,慢指针走一步,快指针遇到终止位置时,慢指针就在......
  • [LeetCode Hot 100] LeetCode206. 反转链表
    题目描述思路:双指针算法方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode(intval,ListNodenext){this.val=v......
  • [LeetCode Hot 100] LeetCode49. 字母异位词
    题目描述思路:哈希表对字符串排序,如果是异位词,排序后就变成一样的了。方法一:classSolution{publicList<List<String>>groupAnagrams(String[]strs){Map<String,List<String>>map=newHashMap<>();for(inti=0;i<strs.length;i......
  • [LeetCode Hot 100] LeetCode141. 环形链表
    题目描述思路:快慢指针slow指针:每次移动一个节点fast指针:每次移动两个节点如果链表中存在环,fast指针最终会在某一时刻追上slow指针,这是由于移动速度快的fast指针会在某个时刻绕圈并追上速度慢的slow指针条件fast!=null&&fast.next!=null保证了在每一步迭代中,fast和......
  • GMK15100-ASEMI光伏设备二极管GMK15100
    编辑:llGMK15100-ASEMI光伏设备二极管GMK15100型号:GMK15100品牌:ASEMI正向电流:15A反向耐压:100V封装:批号:2023+引脚数量:2工作温度:-55°C~150°CGMK15100特征:肖特基势垒高二极管;热阻低;正向压降低,功率损耗低隔离包装设计,非常适合散热;高正向电流能力;优异的抗湿性;低调的......