10. 九转金丹炼矩阵 - 矩阵置零(标记优化)

news/2025/2/24 12:48:00

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的金丹谷,谷中有一座巨大的九转金丹炉,炉身闪烁着神秘的光芒。金丹炉的入口处有一块巨大的石碑,上面刻着一行文字:“欲破此炉,需以九转金丹之力,炼矩阵之零,标记优化定乾坤。”

哪吒定睛一看,石碑上还有一行小字:“矩阵中,需要将包含0的行和列全部置为0。”哪吒心中一动,他知道这是一道关于矩阵置零的难题,需要找到矩阵中所有包含0的行和列,并将它们全部置为0。

[
  [1, 1, 1],
  [1, 0, 1],
  [1, 1, 1]
]

暴力解法:九转金丹的初次尝试

哪吒心想:“要将矩阵中包含0的行和列置为0,我可以先记录所有包含0的行和列,然后再逐行逐列置零。”他催动九转金丹之力,从头到尾遍历矩阵,用两个集合记录所有包含0的行和列。随后,他根据这些记录将对应的行和列置为0。

void setZeroes(vector<vector<int>>& matrix) {
   
    int m = matrix.size();
    int n = matrix[0].size();
    unordered_set<int> zeroRows, zeroCols;

    // 记录包含0的行和列
    for (int i = 0; i < m; ++i) {
   
        for (int j = 0; j < n; ++j) {
   
            if (matrix[i][j] == 0) {
   
                zeroRows.insert(i);
                zeroCols.insert(j);
            }
        }
    }

    // 置零行
    for (int row : zeroRows) {
   
        fill(matrix[row].begin(), matrix[row].end(), 0);
    }

    // 置零列
    for (int col : zeroCols) {
   
        for (int i = 0; i < m; ++i) {
   
            matrix[i][col] = 0;
        }
    }
}

哪吒成功地将矩阵中包含0的行和列置为0,但九转金丹炉的光芒却黯淡了下来。他意识到,这种方法虽然可行,但需要额外的空间来存储行和列的标记,灵力消耗较大。

C++语法点:集合与矩阵操作

在C++中,集合和矩阵操作是处理矩阵问题的常用工具。以下是一些重要特性:

  • 集合
    • unordered_set是一个基于哈希表的集合,用于存储唯一元素。
    • 常用方法:
      • insert(value):插入一个元素。
      • find(value):查找一个元素是否存在。
  • 矩阵操作
    • 使用vector<vector<int>>表示矩阵
    • 使用fill(start, end, value)可以将一段范围内的元素全部置为指定值。

高阶优化:标记优化的智慧

哪吒元神中突然浮现金色铭文——「九转金丹炼,标记优化定乾坤」。他意识到,可以通过标记优化的方式,在矩阵的第一行


http://www.niftyadmin.cn/n/5864335.html

相关文章

QT中经常出现的用法:组合

在 C 中&#xff0c;一个类包含另一个类的对象称为组合&#xff08; Composition &#xff09;。这是一种常见的设计模式&#xff0c;用 于表示一个类是由另一个类的对象组成的。这种关系通常表示一种 " 拥有 " &#xff08; "has-a" &#xff09;的关系。…

STM32——HAL库开发笔记22(定时器3—呼吸灯实验)(参考来源:b站铁头山羊)

本文利用前几节所学知识来实现一个呼吸灯实验&#xff1a;两颗led灯交替呼吸。 一、STM32CubeMX配置 step1&#xff1a;配置调试接口 step2&#xff1a;配置定时器 定时器1位于APB2总线上&#xff0c;如上图所示。 step3&#xff1a;配置时基单元 按照下图配置 时钟来源配置…

网络运维学习笔记 022 HCIA-Datacom新增知识点03园区网典型组网架构及案例实战

园区网典型组网架构及案例实战 园区网&#xff1a;内部运行了园区网协议的一个主体网络 园区网络典型架构 园区网络常用协议与技术&#xff1a; 接入层&#xff1a; VLAN、生成树、链路聚合、AAA、dhcp-snooping等 汇聚层&#xff1a;DHCP、堆叠、链路聚合、生成树、OSPF、静…

正则表达式效验邮箱格式, 手机号格式, 密码长度

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:松树千年终是朽&#xff0c;槿花一日自为荣&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

MQTT实现智能家居------3、源码分析(超详细)

一、连接服务器 1、初始化&#xff1a; mqtt_log_init();是一个空函数&#xff0c;自己定义宏 client mqtt_lease();//创建一个client结构体&#xff0c;从此以后client代表客户端 platform_memory_alloc();//是一个分配内存的总函数&#xff0c;可以适用于Linux、FreeRTos…

[oAuth2授权]Web前端+NodeCoze API Web后端程序+Coze授权服务器工作流程架构流程图详解

嗯,用户之前已经了解了如何使用React和Node.js结合Coze API实现OAuth2授权,现在他们具体想实现的是在Web应用中,当用户点击一个按钮(比如“和Bot对话”)时,触发授权流程,重定向到Coze的授权服务器获取code。用户还提供了一个具体的cURL请求示例,展示了如何通过302重定向…

鸿蒙学习-

鸿蒙数据传值 //* 传值 //* State /**State创建一个响应式的数据&#xff0c;但不是所有的更改都会引起刷新&#xff0c;只有被框架观察到的修改才会被刷新UI* 1. 基本数据类型如 number string boolean等值的变化修改* 2. Object类型&#xff0c;只会观察到第一层的数据变化或…

Redis面试宝典【刷题系列】

文章目录 一、什么是Redis&#xff1f;二、Redis相比Memcached有哪些优势&#xff1f;三、Redis支持的数据类型有哪些&#xff1f;四、Redis的主要消耗的物理资源是什么&#xff1f;五、Redis的全称是什么&#xff1f;六、Redis有哪些数据淘汰策略&#xff1f;七、为什么Redis需…