当前位置: 首页 > news >正文

【Hot100】 73. 矩阵置零

目录

  • 引言
  • 矩阵置零
    • 我的解题
    • 优化
      • 优化思路
      • 分步解决思路
      • 为什么必须按照这个顺序处理?
      • 完整示例演示
      • 总结

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:【Hot100】 73. 矩阵置零
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

引言

矩阵置零

  • 🎈 题目链接:https://leetcode.cn/problems/set-matrix-zeroes/description/?envType=study-plan-v2&envId=top-100-liked
  • 🎈 做题状态:

我的解题

我的思路还是很明确的,代码写出来也很容易看懂,然后就是分析一下复杂度:

  • 时间复杂度:O(m*n)
  • 空间复杂度:O(m*n) 根据矩阵中0的个数来决定。
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {// 使用两个哈希表来存储行、列为0的索引,使用unordered_set刚好可以去重unordered_set<int> row; // 行unordered_set<int> col; // 列for (int i = 0; i < matrix.size(); ++i){for (int j = 0; j < matrix[0].size(); ++j){if (matrix[i][j] == 0){row.insert(i);col.insert(j);}}}for (int i = 0; i < matrix.size(); ++i){for (int j = 0; j < matrix[0].size(); ++j){if ( row.find(i) != row.end() || col.find(j) != col.end() ){matrix[i][j] = 0;}}}}
};

优化

将矩阵中某个元素为0时,其所在的行和列全部置零。要求空间复杂度为 O(1)(即原地修改)。


优化思路

  1. 问题分析

    • 直接遍历矩阵并记录需要置零的行列,需要额外的空间存储标记(如哈希表),空间复杂度为 O(m+n)。
    • 优化方向:利用矩阵自身的首行和首列作为标记位,避免额外空间。
  2. 关键挑战

    • 首行和首列本身可能包含0,直接使用它们作为标记位时,需要确保这些原始0的标记不被覆盖。

分步解决思路

步骤1:预先检查首行和首列是否有0

  • 目的:记录首行和首列的原始状态,避免后续标记覆盖这些信息。
  • 操作
    • 遍历第一行,检查是否有0 → 记录到 firstRowZero
    • 遍历第一列,检查是否有0 → 记录到 firstColZero

步骤2:标记需要置零的行和列

  • 范围:从第二行第二列开始(即非首行、非首列)。
  • 规则:如果 matrix[i][j] == 0,则:
    • 标记行:将该行首元素置零 → matrix[i][0] = 0
    • 标记列:将该列首元素置零 → matrix[0][j] = 0
  • 意义:利用首行和首列作为“开关”,标记哪些行和列需要置零。

步骤3:根据标记置零其他元素

  • 范围:从第二行第二列开始。
  • 规则:如果某行的首元素为0(matrix[i][0] == 0)或某列的首元素为0(matrix[0][j] == 0),则将该元素置零。

步骤4:最后处理首行和首列

  • 首行置零:如果 firstRowZero 为 true,将整个第一行置零。
  • 首列置零:如果 firstColZero 为 true,将整个第一列置零。

为什么必须按照这个顺序处理?

1. 预先检查首行首列

  • 问题:如果首行或首列原本有0,后续标记时会覆盖它们的值,导致无法判断是否需要最终置零。
  • 解决:先记录首行首列的原始状态(是否有0),后续标记不会影响这一信息。

2. 最后处理首行首列

  • 问题:如果提前处理首行首列(如先置零),会导致标记位被覆盖。
  • 示例
    • 原始矩阵
      0 2 3
      4 5 6
      
    • 错误做法
      1. 先处理首行 → 置零首行。
      2. 后续标记其他行列时,首行已被清零,无法正确标记。
    • 正确做法
      1. 先标记其他行列 → 首行保持原样。
      2. 最后根据 firstRowZero 置零首行。

完整示例演示

原始矩阵

1  2  3  4
5  0  7  8
9 10 11 12
0 14 15 16

步骤1:检查首行首列

  • 首行无0 → firstRowZero = false
  • 首列有0(第4行) → firstColZero = true

步骤2:标记其他行列

  • 发现 matrix[1][1] = 0(第2行第2列):
    • 标记行 → matrix[1][0] = 0
    • 标记列 → matrix[0][1] = 0
  • 标记后的首行首列:
    1 0 3 4  ← 首行第2列被标记为0
    0 ...    ← 第2行首列被标记为0
    

步骤3:根据标记置零

  • 所有行首或列首为0的位置:
    • 第2行 → 整行置零。
    • 第2列 → 整列置零。
  • 结果:
    1 0 3 4
    0 0 0 0
    9 0 11 12
    0 0 15 16
    

步骤4:处理首列

  • 因为 firstColZero = true,将首列置零:
    0 0 3 4
    0 0 0 0
    0 0 11 12
    0 0 15 16
    

总结

  1. 核心思想:利用首行首列作为标记位,避免额外空间。
  2. 关键顺序
    • 先记录首行首列的原始状态。
    • 再标记其他行列。
    • 最后处理首行首列。
  3. 避免覆盖标记:首行首列的原始0必须在标记完成后处理,否则标记会被破坏。
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {// 检查矩阵是否为空if (matrix.empty()) return;int m = matrix.size();     // 行数int n = matrix[0].size();  // 列数// 标记第一行和第一列是否需要置零(因为它们会被用来记录其他行列的状态,需要最后处理)bool firstRowZero = false; // 第一行是否需要置零bool firstColZero = false; // 第一列是否需要置零// 检查第一行是否有0(注意:单独处理,避免后续覆盖标记)for (int j = 0; j < n; ++j) {if (matrix[0][j] == 0) {firstRowZero = true;break; // 发现0即可退出循环}}// 检查第一列是否有0for (int i = 0; i < m; ++i) {if (matrix[i][0] == 0) {firstColZero = true;break;}}// -------------------- 核心步骤 --------------------// 从第二行第二列开始遍历,用第一行和第一列记录需要置零的行列for (int i = 1; i < m; ++i) {for (int j = 1; j < n; ++j) {if (matrix[i][j] == 0) {// 将当前行的首元素标记为0(表示这一行需要置零)matrix[i][0] = 0;// 将当前列的首元素标记为0(表示这一列需要置零)matrix[0][j] = 0;}}}// 根据第一行和第一列的标记,将对应的元素置零for (int i = 1; i < m; ++i) {for (int j = 1; j < n; ++j) {// 如果当前行或列的首元素是0,说明这个位置需要置零if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}// -------------------- 核心步骤结束 --------------------// 处理第一行是否需要置零if (firstRowZero) {for (int j = 0; j < n; ++j) {matrix[0][j] = 0;}}// 处理第一列是否需要置零if (firstColZero) {for (int i = 0; i < m; ++i) {matrix[i][0] = 0;}}}
};

相关文章:

【Hot100】 73. 矩阵置零

目录 引言矩阵置零我的解题优化优化思路分步解决思路为什么必须按照这个顺序处理&#xff1f;完整示例演示总结 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot100】 73. 矩阵置零❣️ 寄语&#xff…...

c++_csp-j算法 (2)

目录 BFS搜索(广度优先搜索) 讲解 BFS搜索算法原理 BFS搜索算法实现 BFS搜索算法的应用 例题(1) P1032 [NOIP 2002 提高组] 字串变换 例题(2) P1443 马的遍历 BFS搜索(广度优先搜索) 讲解 BFS搜索算法原理 广度优先搜索(BFS)算法是一种图的搜索算法,用于遍历…...

学习笔记: Mach-O 文件

“结构决定性质,性质决定用途”。如果不了解结构,是很难真正理解的。 通过一个示例的可执行文件了解Mach-O文件的结构 Mach-O基本结构 Header: &#xff1a;文件类型、目标架构类型等Load Commands&#xff1a;描述文件在虚拟内存中的逻辑结构、布局Data: 在Load commands中…...

基于GRPO将QWEN训练为和deepseek一样的推理模型!

GRPO 群体相对策略优化&#xff08;GRPO&#xff09;算法最初由deepseek团队提出&#xff0c;是近端策略优化(PPO)的一个变体。 GRPO 是一种在线学习算法&#xff0c;它通过使用训练过程中已训练模型自身生成的数据进行迭代改进。GRPO 目标背后的逻辑是在确保模型与参考策略保…...

STM32 外部中断EXTI

目录 外部中断基础知识 STM32外部中断框架 STM32外部中断机制框架 复用功能 重映射 中断嵌套控制器NVIC 外部中断按键控制LED灯 外部中断基础知识 STM32外部中断框架 中断的概念&#xff1a;在主程序运行过程中&#xff0c;出现了特点的中断触发条件&#xff0c;使得…...

Codex CLI - 自然语言命令行界面

本文翻译整理自&#xff1a;https://github.com/microsoft/Codex-CLI 文章目录 一、关于 Codex CLI相关链接资源 二、安装系统要求安装步骤 三、基本使用1、基础操作2、多轮模式 四、命令参考五、提示工程与上下文文件自定义上下文 六、故障排查七、FAQ如何查询可用OpenAI引擎&…...

健身会员管理系统(ssh+jsp+mysql8.x)含运行文档

健身会员管理系统(sshjspmysql8.x) 对健身房的健身器材、会员、教练、办卡、会员健身情况进行管理&#xff0c;可根据会员号或器材进行搜索&#xff0c;查看会员健身情况或器材使用情况。...

数据结构——快排和归并排序(非递归)

快速排序和归并排序一般都是用递归来实现的&#xff0c;但是掌握非递归也是很重要的&#xff0c;说不定在面试的时候面试官突然问你快排或者归并非递归实现&#xff0c;递归有时候并不好&#xff0c;在数据量非常大的时候效率就不好&#xff0c;但是使用非递归结果就不一样了&a…...

Trae,字节跳动推出的 AI 编程助手插件

Trae 插件是 Trae 旗下全新一代的人工智能编程助手&#xff08;前身为 MarsCode 编程助手&#xff09;&#xff0c;以插件形式集成在本地开发环境中&#xff0c;具备极高的兼容性和灵活性&#xff0c;旨在提升开发效率和代码质量。它支持超过100种编程语言&#xff0c;兼容主流…...

Qt项目——Tcp网络调试助手服务端与客户端

目录 前言结果预览工程文件源代码一、开发流程二、Tcp协议三、Socket四、Tcp服务器的关键流程五、Tcp客户端的关键流程六、Tcp服务端核心代码七、客户端核心代码总结 前言 这期要运用到计算机网络的知识&#xff0c;要搞清楚Tcp协议&#xff0c;学习QTcpServer &#xff0c;学…...

2021-11-10 C++蜗牛爬井进3退1求天数

缘由C大一编程题目。-编程语言-CSDN问答 int n 0, t 0;cin >> n;while ((n - 3)>0)n, t;cout << t << endl;...

玛哈特整平机:工业制造中的关键设备

在现代工业制造中&#xff0c;平整度是衡量材料加工质量的核心指标之一。无论是金属板材、塑料片材还是复合材料&#xff0c;若存在弯曲、翘曲或波浪形缺陷&#xff0c;将直接影响后续加工效率和成品质量。整平机&#xff08;又称校平机、矫平机&#xff09;作为解决这一问题的…...

LINUX419 更换仓库(没换成)find命令

NAT模式下虚拟机需与网卡处在同一个网段中吗 和VM1同个网段 会不会影响 这个很重要 是2 改成点2 倒是Ping通了 为啥ping百度 ping到别的地方 4399 倒是ping通了 准备下载httpd包 下不下来 正在替换为新版本仓库 报错 failure: repodata/repomd.xml from local: [Er…...

C# 预定义类型全解析

在 C# 编程中&#xff0c;预定义类型是基础且重要的概念。下面我们来详细了解 C# 的预定义类型。 预定义类型概述 C# 提供了 16 种预定义类型&#xff0c;包含 13 种简单类型和 3 种非简单类型。所有预定义类型的名称都由全小写字母组成。 预定义简单类型 预定义简单类型表…...

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(16):ReactExecutor

CangjieMagic框架&#xff1a;使用华为仓颉编程语言编写&#xff0c;专门用于开发AI Agent&#xff0c;支持鸿蒙、Windows、macOS、Linux等系统。 这篇文章剖析一下 CangjieMagic 框架中的 ReactExecutor。 这个执行器名字中的"React"代表"Reasoning and Acti…...

13.第二阶段x64游戏实战-分析人物等级和升级经验

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;12.第二阶段x64游戏实战-远程调试 效果图&#xff1a; 如下图红框&#xff0c;…...

Linux疑难杂惑 | 云服务器重装系统后vscode无法远程连接的问题

报错原因&#xff1a;本地的known_hosts文件记录服务器信息与现服务器的信息冲突了&#xff0c;导致连接失败。 解决方法&#xff1a;找到本地的known_hosts文件&#xff0c;把里面的所有东西删除后保存就好了。 该文件的路径可以在报错中寻找&#xff1a;比如我的路径就是&a…...

使用EXCEL绘制平滑曲线

播主播主&#xff0c;你都多少天没更新了&#xff01;&#xff01;&#xff01;泥在干什么&#xff1f;你还做这个账号麻&#xff1f;&#xff01;&#xff01;&#xff01; 做的做的&#xff08;哭唧唧&#xff09;&#xff0c;就是最近有些忙&#xff0c;以及…… 前言&…...

你的电脑在开“外卖平台”?——作业管理全解析

你的电脑在开“外卖平台”&#xff1f;——作业管理全解析 操作系统系列文章导航&#xff08;点击跳转&#xff09; 程序员必看&#xff1a;揭开操作系统的神秘面纱 &#xff1a;从进程、内存到设备管理&#xff0c;全面解析操作系统的核心机制与日常应用。告别电脑卡顿&#x…...

平均池化(Average Pooling)

1. 定义与作用​​ ​​平均池化​​是一种下采样操作&#xff0c;通过对输入区域的数值取​​平均值​​来压缩数据空间维度。其核心作用包括&#xff1a; ​​降低计算量​​&#xff1a;减少特征图尺寸&#xff0c;提升模型效率。​​保留整体特征​​&#xff1a;平滑局部…...

JavaScript中的Event事件对象详解

一、事件对象&#xff08;Event&#xff09;概述 1. 事件对象的定义 event 对象是浏览器自动生成的对象&#xff0c;当用户与页面进行交互时&#xff08;如点击、键盘输入、鼠标移动等&#xff09;&#xff0c;事件触发时就会自动传递给事件处理函数。event 对象包含了与事件…...

OSPF综合实验(HCIP)

1&#xff0c;R5为ISP&#xff0c;其上只能配置Ip地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过ppp协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3&#xff0c;所有设备均可访问R5的环回&…...

Unreal 从入门到精通之如何接入MQTT

文章目录 前言MQTT 核心特性MQTT 在 UE5 中的应用场景在 UE5 中集成 MQTTMqtt Client 的APIMqtt Client 使用示例最后前言 MQTT(Message Queuing Telemetry Transport)是一种专为物联网(IoT)和低带宽、高延迟网络环境设计的轻量级消息传输协议。它采用发布/订阅(Pub/Sub)…...

数据结构实验6.2:稀疏矩阵的基本运算

文章目录 一&#xff0c;实验目的二&#xff0c;问题描述三&#xff0c;基本要求四、算法分析&#xff08;一&#xff09;稀疏矩阵三元组表示法存储结构&#xff08;二&#xff09;插入算法&#xff08;三&#xff09;创建算法&#xff08;四&#xff09;输出算法&#xff08;五…...

BDO分厂积极开展“五个一”安全活动

BDO分厂为规范化学习“五个一”活动主题&#xff0c;按照“上下联动、分头准备 、差异管理、资源共享”的原则&#xff0c;全面激活班组安全活动管理新模式&#xff0c;正在积极开展班组安全活动&#xff0c;以单元班组形式对每个班组每周组织一次“五个一”安全活动。 丁二醇单…...

那就聊一聊mysql的锁

MySQL 的锁机制是数据库并发控制的核心&#xff0c;作为 Java 架构师需要深入理解其实现原理和适用场景。以下是 MySQL 锁机制的详细解析&#xff1a; 一、锁的分类维度 1. 按锁粒度划分 锁粒度特点适用场景​全局锁​锁定整个数据库&#xff08;FLUSH TABLES WITH READ LOC…...

Python番外——常用的包功能讲解和分类组合

目录 1. Web开发框架与工具 2. 数据处理与分析 3. 网络请求与爬虫 4. 异步编程 5. 数据库操作 6. 图像与多媒体处理 7. 语言模型与NLP 8. 安全与加密 9. 配置与工具 10. 其他工具库 11.典型组合场景 此章节主要是记录我所使用的包&#xff0c;以及模块。方便供自己方…...

【mongodb】数据库操作

目录 1. 查看所有数据库2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则创建&#xff09;3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库&#xff08;若数据库不存在&#xff0c;则…...

四月下旬系列

CUHKSZ 校赛 期中考试 DAY -1。 省流&#xff1a;前 1h 切 6 题&#xff0c;后 3h 过 1 题&#xff0c;读错一个本来很【】的题&#xff0c;被大模拟构造创【】了。 本地除了 VSCode 没有 Extensions&#xff0c;别的和省选差不多。使用 DEVC。 前 6 题难度 < 绿&#x…...

计算机网络 3-4 数据链路层(局域网)

4.1 局域网LAN 特点 1.覆盖较小的地理范围 2.较低的时延和误码率 3.局域网内的各节点之间 4.支持单播、广播、多播 分类 关注三要素 &#xff08;出题点&#xff09; ①拓扑结构 ②传输介质 ③介质访问控制方式 硬件架构 4.2 以太网 4.2.1 层次划分 4.2.2 物理层标准…...

WebSocket介绍

在网页聊天项目中&#xff0c;为了实现消息的发送和及时接收&#xff0c;我们使用了WebSocket&#xff0c;接下来就简单介绍一下这个WebSocket。 了解消息的转发逻辑 当两个不同客户端在不同的局域网中互相发送消息时&#xff0c;假如这两个客户端分别是a和b&#xff0c;因为…...

rpcrt4!COMMON_AddressManager函数分析之和全局变量rpcrt4!AddressList的关系

第一部分&#xff1a; 1: kd> x rpcrt4!addresslist 77c839dc RPCRT4!AddressList 0x00000000 1: kd> g Breakpoint 2 hit RPCRT4!OSF_ADDRESS::CompleteListen: 001b:77c0c973 55 push ebp 1: kd> g Breakpoint 11 hit RPCRT4!COMMON_Addr…...

Java Web 之 Tomcat 100问

Tomcat 是什么&#xff1f; Tomcat 是一个开源的 Java Servlet 容器和 Web 容器。 Tomcat 的主要功能有哪些&#xff1f; 三大主要功能&#xff1a; 运行 Java Web 应用。处理 HTTP 请求。管理 Web 应用。 如何安装 Tomcat &#xff1f; 下载 Tomcat 安装包&#xff08;A…...

ESB —— 企业集成架构的基石:功能、架构与应用全解析

企业服务总线&#xff08;Enterprise Service Bus&#xff0c;ESB&#xff09;是一种重要的企业级集成架构&#xff0c;以下为你详细介绍&#xff1a; 一、概念与定义 ESB 是一种基于面向服务架构&#xff08;SOA&#xff09;的中间件技术&#xff0c;它充当了企业内部不同应…...

wordpress SMTP配置qq邮箱发送邮件,新版QQ邮箱授权码获取方法

新版的QQ邮箱界面不同了&#xff0c;以下是新版的设置方法&#xff1a; 1. 进入邮箱后&#xff0c;点右上角的设置图标&#xff1a; 2. 左下角的菜单里&#xff0c;选择“账号与安全” &#xff1a; 3. 然后如下图&#xff0c;开启SMTP 服务&#xff1a; 4. 按提示验证短信&am…...

【操作系统原理04】进程同步

文章目录 大纲一.进程同步与进程互斥0.大纲1.同步2.互斥 二.进程互斥的软件实现方法0.大纲1.单标志法2.双标志先检查法3.双标志后检查法4.Peterson算法 三.进程互斥的硬件实现方法0.大纲1.中断屏蔽方法2.TestAndSet指令3.Swap指令 四.互斥锁五.信号量机制0.大纲1.概念2.整形信号…...

Java ThreadPoolExecutor 深度解析:从原理到实战

在 Java 的多线程编程领域&#xff0c;ThreadPoolExecutor是一个至关重要的工具类&#xff0c;它为开发者提供了强大且灵活的线程池管理能力。合理使用ThreadPoolExecutor&#xff0c;不仅能够提升应用程序的性能和响应速度&#xff0c;还能有效控制资源消耗&#xff0c;避免因…...

MCP 协议——AI 世界的“USB-C 接口”:解锁智能协作的新时代

在过去十年中&#xff0c;科技的进步已经改变了我们日常生活的方方面面。从智能手机的普及到物联网的快速发展&#xff0c;人们的生活被各种创新的技术重新定义。今天&#xff0c;我们即将迎来另一个里程碑式的转折点——MCP 协议的推出&#xff0c;它将为人工智能世界的协作与…...

知识就是力量——一些硬件的使用方式

硬件平台 正点原子ATK-MD0430 V2.0&#xff08;4.3寸TFT LCD电容触摸屏/使用cc2530控制&#xff09;1.硬件连接2. 软件驱动实现3. 优化与注意事项4. 示例工程参考5. 常见问题 正点原子ATK-MD0430 V2.0&#xff08;4.3寸TFT LCD电容触摸屏/使用cc2530控制&#xff09; 1.硬件连…...

机器学习(1)— 开发环境安装

机器学习&#xff08;1&#xff09;— 准备开发环境 一、前言 二、Ubuntu开发环境安装 1、NumPy安装 使用如下命令安装&#xff1a; sudo apt-get install python3-numpy2、PyTorch 安装 由于我电脑暂时没有英伟达显卡&#xff0c;暂时安装CPU版&#xff1a; pip3 insta…...

深入实战:使用C++开发高性能RESTful API

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

C++之虚函数 Virtual Function

1. 普通虚函数&#xff08;Virtual Function&#xff09; 定义&#xff1a;基类中用 virtual 声明&#xff0c;允许派生类 覆盖&#xff08;Override&#xff09;。特点&#xff1a; 基类可提供默认实现。派生类可选择性覆盖&#xff08;若不覆盖&#xff0c;则调用基类版本&a…...

【java实现+4种变体完整例子】排序算法中【选择排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是选择排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、选择排序基础实现 原理 每一轮遍历未排序部分&#xff0c;找到最小元素并交换到当前起始位置&#xff0c;逐步构建已排序序列。 代码示例 pu…...

DNS主从同步实验

dns域名解析原理 实验步骤1、主dns要完成dns解析&#xff1a;192.168.21.128 [rootlocalhost ~]# yum install bind -y [rootlocalhost ~]# systemctl start named [rootlocalhost ~]# vim /etc/named.conf options { listen-on port 53 { any; }; direct…...

UIjavaScritIU

1、直接执行js脚本&#xff1a;document.documentElement.scrollTop1000 document.getElementById(“su”).click() 弊端&#xff1a; js自己带的元素定位方法不如selenium的丰富 不支持xpath css 等 定位元素操作不是很灵活。 需要借助js脚本传入 -selenium定位 js 负责执行动…...

Manus技术架构、实现内幕及分布式智能体项目实战 线上高级实训班

Manus技术架构、实现内幕及分布式智能体项目实战 线上高级实训班 模块一&#xff1a;解密Manus分布式多智能体工作原理和架构内幕  基于Claude和Qwen的大模型智能体Manus为何能够迅速成为全球讨论热度最高、使用体验最好、产业界最火爆的大模型智能体产品&#xff1f;  Ma…...

Java——二维数组

一、概念 二维数组也是一种容器&#xff0c;不同于一维数组&#xff0c;该容器存储的都是一维数组容器。 二、定义格式 1.数据类型[ ] [ ] 变量名; 2.数据类型 变量名 [ ] [ ]; 3.数据类型 [ ] 变量名 [ ]; 三、动态初始化 &#xff08;一&#xff09;书写 1.格式 数据…...

豆瓣图书数据采集与可视化分析(一)- 豆瓣图书数据爬取

文章目录 前言一、数据爬取步骤二、豆瓣图书页面分析​1. 图书分类标签页面分析2. 图书页面分析 三、数据采集实现1. 图书分类标签数据采集2. 图书数据采集3. 把多个分类的CSV数据文件整合到一个CSV文件中 前言 在当今大数据时代&#xff0c;数据的获取与整理对于各个领域的研…...

车载诊断新架构--- SOVD初入门(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

test——自动化测试

目录 一概念 1自动化 2回归测试 3自动化分类 3.1接口自动化 3.2UI自动化 4自动化测试金字塔 5web自动化测试 6工作原理 二函数 1元素定位 1.1cssSelector ​编辑1.2xpath 语法 2操作对象 2.1click() 2.2send_keys() 2.3clear() 2.4text 2.5get_attribu…...