LeetCode Hot 100 第8天

1. 73 矩阵置零(记录标识)

链接:题目链接
题解

题解 时间复杂度O(n*m)

  1. 方案1(空间复杂度O(n + m)):matrix[i][j] = 0,意味着 第i行、第j列所有元素都要置为0;维护能置为0行、列的集合rowSet、columnSet;最后再遍历置0既可
  2. 方案2(空间复杂度O(1)):能否把上述rowSet、columnSet记录在matrix数组中?
  3. 如果matrix[i][j] = 0,记录在matrix[0][j] = 0、matrix[i][0] = 0(这两个值本身就要置为0),会导致不知道第0行、0列是否需要置为0
  4. 那么单独用两个变量记录第0列、第0行是否需要 置为0就行了
  5. 注意:在根据matrix[i][0]、matrix[0][j] = 0 将当前列、当前行置为0的时候,不需要处理第0列、第0行(会影响接下来的遍历),且第0行第0列有单独的变量标识处理

代码

// 方案1public void setZeroes(int[][] matrix) {// 行 x... 用常数来记录下来// 列 y... 用常数来记录下来int rowLen = matrix.length;int columnLen = matrix[0].length;Set<Integer> rowZeroSet = new HashSet<>(rowLen);Set<Integer> columnZeroSet = new HashSet<>(columnLen);for (int i = 0; i < rowLen; ++ i) {for (int j = 0; j < columnLen; ++ j) {if (matrix[i][j] == 0) {rowZeroSet.add(i);columnZeroSet.add(j);}}}for (Integer index: rowZeroSet) {Arrays.fill(matrix[index], 0);}for (Integer index: columnZeroSet) {for (int i = 0; i < rowLen; ++ i) {matrix[i][index] = 0;}}}// 方案2
class Solution {public void setZeroes(int[][] matrix) {int rowLen = matrix.length;int columnLen = matrix[0].length;boolean rowZeroFlag = false, columnZeroFlag = false;for (int[] value : matrix) {if (value[0] == 0) {columnZeroFlag = true;break;}}for (int i = 0; i < columnLen; ++ i) {if (matrix[0][i] == 0) {rowZeroFlag = true;break;}}for (int i = 1; i < rowLen; ++ i) {for (int j = 1; j < columnLen; ++ j) {if (matrix[i][j] == 0) {matrix[0][j] = 0;matrix[i][0] = 0;}}}for (int i = 1; i < rowLen; ++ i) {if (matrix[i][0] == 0) {Arrays.fill(matrix[i], 0);}}for (int i = 1; i < columnLen; ++ i) {if (matrix[0][i] == 0) {for (int j = 0; j < rowLen; ++ j) {matrix[j][i] = 0;}}}if (columnZeroFlag) {for (int i = 0; i < rowLen; ++ i) {matrix[i][0] = 0;}}if (rowZeroFlag) {for (int i = 0; i < columnLen; ++ i) {matrix[0][i] = 0;}}}
}

2. 54 螺旋矩阵(模拟 + 边界判断)

链接:题目链接
题解

题解 时间复杂度O(n*m)

  1. 按照逆时针转动(左 -> 下 -> 右 -> 上)
  2. 记录左 -> 下 -> 右 -> 上的边界,维护边界既可
  3. 注意:如果左 -> 下 -> 右 -> 上,其中一条路走不通的话,就终止循环(例如左 -> 右 -> 上(少了下),往左走完,没办法往下走,往如果直接往右走,那么就会重复记录,如果往上走,也会走不通)

代码

class Solution {public List<Integer> spiralOrder(int[][] matrix) {int l = 0, r = matrix[0].length - 1, low = 0, hight = matrix.length - 1;List<Integer> ans = new ArrayList<>();while (true) {// 往右走if (l > r) {break;}for (int i = l; i <= r; ++ i) {ans.add(matrix[low][i]);}low ++;// 往下走if (low > hight) {break;}for (int i = low; i <= hight; ++ i) {ans.add(matrix[i][r]);}r --;// 往左走if (l > r) {break;}for (int i = r; i >= l; -- i) {ans.add(matrix[hight][i]);}hight --;// 往上走if (low > hight) {break;}for (int i = hight; i >= low; -- i) {ans.add(matrix[i][l]);}l ++;}return ans;}
}

3. 2461 长度为 K 子数组中的最大和(双指针)

链接:题目链接
题解

题解 时间复杂度O(n)

  1. 维护一个左右指针[l, r],保证 [l, r]区间内没有重复数字
  2. 向右移动r指针,如果[l, r]区间内出现过nums[r + 1]数字,那么向右移动l指针,直至[l, r+1]没有重复数字
  3. 如果[l, r]区间大小 > k,需要向右移动l指针
  4. 需要维护一个区间和,方便取最大值

代码

class Solution {public long maximumSubarraySum(int[] nums, int k) {int len = nums.length;Set<Integer> numSet = new HashSet<>();long sum = 0;long ans = 0;for (int i = 0, j = 0; i < len; ++ i) {while (numSet.contains(nums[i])) {sum -= nums[j];numSet.remove(nums[j]);j ++;}numSet.add(nums[i]);sum += nums[i];if (i - j + 1 == k) {ans = Math.max(ans, sum);sum -= nums[j];numSet.remove(nums[j]);j++;}}return ans;}
}

如果对你有帮助,辛苦点个赞,谢谢啦,朋友!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94715.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python OpenCV图像处理与深度学习:Python OpenCV开发环境搭建与入门

Python OpenCV入门&#xff1a;环境设置 学习目标 通过本课程&#xff0c;学员们将学习在Windows、macOS和Linux操作系统上安装Python和OpenCV&#xff0c;配置开发环境&#xff0c;以及如何使用Jupyter Notebook和PyCharm等集成开发环境&#xff08;IDE&#xff09;进行基本操…

【论文阅读】SegCLIP:用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习

【论文阅读】SegCLIP&#xff1a;用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习 文章目录【论文阅读】SegCLIP&#xff1a;用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习一、介绍二、联系工作三、方法四、实验结果**数据集**SegCLIP: Multimodal Visual-…

Anaconda、OpenCV安装配置方法

目录 1.Anaconda安装 1.1 国内镜像软件下载 1.2 点击exe&#xff0c;一路下一步安装 1.3 检查安装情况 1.3.1 安装前后系统环境变量变化对比 1.3.2 查看安装路径和版本 1.4 Anaconda自带的python版本查看命令如下&#xff1a; 1.5 修改镜像地址&#xff0c;加快下载包的…

C++函数继承

C函数继承引言C三大特征分别为封装&#xff0c;继承和多态&#xff0c;它们构成了面向对象编程的基石&#xff0c;它们协同工作以提升代码的模块化&#xff0c;可复用性和灵活性封装&#xff1a;提高代码的维护性&#xff08;当程序出现问题时可以准确定位&#xff09;继承&…

瞬态数据表定义Fluent变量

重要说明&#xff1a;本文基于2025R2版本编写&#xff0c;其他版本可能存在差异。1 概述瞬态数据表是定义 Fluent 变量随时间变化规律的profile文件&#xff0c;文件类型为文本文件。瞬态数据表假设所有时刻&#xff0c;被定义的对象都是均匀分布&#xff0c;无法考虑变量在空间…

文本嵌入模型的本质

这是一个非常深刻且重要的问题。我们来详细拆解一下“通用文本嵌入模型”的本质。 我们可以从三个层次来理解它&#xff1a;它是什么&#xff08;What&#xff09;&#xff0c;它如何工作&#xff08;How&#xff09;&#xff0c;以及它为什么重要&#xff08;Why&#xff09;。…

Linux笔记13——shell编程基础-7

补充1.printf %s\t%s 字符串 中&#xff0c;\t一定不要加双引号&#xff0c;这一点和在awk中使用的时候有所不同2.其中%s也可以写成%ns&#xff0c;n可以被用来设置列宽&#xff0c;默认右对齐#打印输出文件系统的使用情况 [rootlocalhost ~]# printf %-30s\t%s\n $(df -h | aw…

【混合开发】Android+WebView视频图片播放硬件加速详解

webview视频播放出现白屏、蓝屏、花屏、黑屏等等 但由于布局结构是androidwebviewH5本地视频等。视频播放导致的异常排查起来十分复杂且没有原生的相关日志 于是需要给webview播放视频进行硬件加速&#xff0c;刚开始以为是一件很简单的配置而已。本着无经验从头开始的原则&am…

Allegro-DDR3实战-差分对-等长设置-区域规则

本章内容&#xff1a; 一&#xff09;Allegro之DDR3设计 (实操干货) 二&#xff09;规则设置具体步骤 DDR3信号表: (eg&#xff1a;镁光MT41J256M16HA-15E) 数据信号 DQ[15:0] DQS[1:0] DM[1:0] DQ:双向数据总线 DQS:数据选通&#xff0c;用于同步数据传…

七牛云OSS空间复制迁移到另外一个空间

创新新的空间时存储地区必须一致 访问控制必须选择公开 1、下载七牛的同步工具并解压 qshell&#xff08;http://developer.qiniu.com/docs/v6/tools/qshell.html&#xff09; 2、解压文件 3、运行cmd登录到七牛账号 qshell account 你的七牛AK 你的七牛SK 你的账号 4、测…

windows中Qwen3‑Coder 与 Claude Code 搭配使用

claude安装命令 npm install -g anthropic-ai/claude-code环境变量配置 set ANTHROPIC_BASE_URLhttps://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy set ANTHROPIC_AUTH_TOKENyour-dashscope-apikey可能还需要配置自己的git环境变量 查看git安装位置 按下Win S打…

thunar 文件管理器实现双击使用 nvim打开

archlinux 中thunar 文件管理器&#xff0c;如何实现双击使用 nvim打开查看。我用的是kitty 终端。 在 Arch Linux Thunar kitty nvim 的环境里&#xff0c;要实现 双击文件 -> 用 nvim 打开&#xff0c;你可以这样配置&#xff1a;设置为默认应用 如果你想 双击直接用 n…

深度学习----卷积神经网络实现数字识别

一、准备工作 导入库&#xff0c;导入数据集&#xff0c;划分训练批次数量&#xff0c;规定训练硬件&#xff08;这部分 import torch from torch import nn # 导入神经网络模块 from torch.utils.data import DataLoader # 数据包管理工具&#xff0c;打包数据 from torch…

鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(四)

目录 一,查询表的所有数据 二,根据条件查询数据 三,数据库升级 前面章节已经讲解了数据库的创建,表的创建,已经增删改等操作。下面我们来讲解一下数据库的查询以及升级操作。 一,查询表的所有数据 先来看看官方文档: query(predicates: RdbPredicates, callback: Asy…

20250829_编写10.1.11.213MySQL8.0异地备份传输脚本+在服务器上创建cron任务+测试成功

0.已知前提条件: 10.1.11.213 堡垒机访问 mysql 8.0 版本 密码在/root/.my.cnf 备份脚本:/data/backup_mysql/mysql_backup.sh alarm_system:动环数据库 exit_and_entry:出入境数据库 logs:备份日志 project_cg_view_prod:采购跟踪系统 all :数据库整体备份 imip_ecb…

PostgreSQL 流复制与逻辑复制性能优化与故障切换实战经验分享

PostgreSQL 流复制与逻辑复制性能优化与故障切换实战经验分享 在高可用和数据安全愈发受到重视的生产环境中&#xff0c;PostgreSQL 复制技术是保障业务连续性的重要手段。本文结合真实生产场景&#xff0c;分享流复制&#xff08;Physical Replication&#xff09;与逻辑复制&…

Django开发规范:构建可维护的AWS资源管理应用

引言 在现代Web开发中,遵循一致的开发规范对于项目的可维护性和团队协作至关重要。本文基于实际的AWS资源管理项目,分享一套经过实践检验的Django开发规范,涵盖模型设计、Admin配置、管理命令和工具类开发等方面。 模型开发规范 数据模型设计原则 良好的数据模型设计是应…

机器学习可解释库Shapash的快速使用教程(五)

文章目录1 快速使用1.1 安装1.2 三个简单步骤快速入门1.2.1 步骤 1&#xff1a;准备模型和数据1.2.2 步骤 2&#xff1a;声明并编译 SmartExplainer1.2.3 步骤 3&#xff1a;可视化和探索1.2.4 启动 Web 应用1.2.5 将解释结果导出为数据2 Shapash的后端集成2.1 方法一&#xff…

如何在emacs中添加imenu插件

在配置文件中添加&#xff1a; ;; 删除现有的包管理器配置&#xff08;如果有&#xff09;&#xff0c;然后添加以下&#xff1a;;; 初始化包管理器 (require package);; 清除现有的仓库列表 (setq package-archives nil);; 添加正确的仓库&#xff08;注意&#xff1a;使用 H…

Linux下的网络编程SQLITE3详解

常用数据库关系型数据库将复杂的数据结构简化为二维表格形式大型&#xff1a;Oracle、DB2中型&#xff1a;MySql、SQLServer小型&#xff1a;Sqlite非关系型数据库以键值对存储&#xff0c;且结构不固定JSONRedisMongoDBsqlite数据库特点开源免费&#xff0c;C语言开发代码量少…