【专题四】前缀和(3)

📝前言说明:

  • 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话)
  • 文章中的理解仅为个人理解。如有错误,感谢纠错

🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础,python入门基础,C++学习笔记,Linux
🎀CSDN主页 愚润泽

视频

  • 974. 和可被 K 整除的子数组
    • 个人解
    • 优质解
  • 525. 连续数组
    • 个人解
    • 优质解
  • 1314. 矩阵区域和
    • 个人解


974. 和可被 K 整除的子数组

题目链接:974. 和可被 K 整除的子数组

在这里插入图片描述

个人解

思路:
和上篇文章的第三题一样,但是,因为哈希表里面可能有多个前缀和都满足要求,而我没想到如何快速搜索到这些前缀和。
暴力解法:O( n 2 n^2 n2)是过不了的。


优质解

思路:

  • 哈希表里面有多个前缀和满足要求是因为:可能出现dp[x2] = dp[x1] + k的情况(即两数之间差nk),导致对于dp[i],可能有多个前缀和与之匹配。那如何保证唯一且能把这些数全部统计到呢?
  • 我们可以在记录前缀和的时候,不记录前缀和,而是记录前缀和 % k的余数。
  • 因为:如果(dp[i] - dp[x]) % k == 0,则dp[i] % k == dp[x] % k
  • 细节问题:我们的数组中有负数,但是C++ 中的取模性质:负数 % 正数 == 负数。所以我们要对模出来的结果进行修正
  • 修正:对于负数结果修正:余数 = dp[i] % k + k,但是为了正负数同一:余数 = (dp[i] % k + k) % k

代码:

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int, int> hash;int ans = 0, sum = 0;hash[0] = 1;for(auto x: nums){sum += x; // sum代表当前位置的前缀和int modulus = (sum % k + k) % k;if(hash.count(modulus)) ans += hash[modulus];hash[modulus]++;}return ans;}
};

时间复杂度:O( n n n)
空间复杂度:O( n n n)


525. 连续数组

题目链接:525. 连续数组

在这里插入图片描述

个人解

思路:
脑子锈了,只能想到O( n 2 n^2 n2)的解法。


优质解

思路:

  • 0-1
  • 问题变成:找子数组所有元素和为0的最长子数组。
  • 细节1:哈希表存储什么? 答:<前缀和,下标>,并且如果遇到相同的前缀和,下标大的不存(因为子数组短)
  • 细节2:当前位置的信息使用完以后才存入哈希表,不然dp[i] - dp[i]这个子数组实际为空
  • 细节3:默认前缀和0的位置要存在-1

代码:

class Solution {
public:int findMaxLength(vector<int>& nums) {int ans = 0, sum = 0;unordered_map<int, int> hash;hash[0] = -1;for(int i = 0; i < nums.size(); i++){sum += (nums[i] == 0? -1 : 1);if(hash.count(sum)) ans = max(ans, i - hash[sum]);elsehash[sum] = i;}return ans;}
};

时间复杂度:O(n)
空间复杂度:O(n)


1314. 矩阵区域和

题目链接:1314. 矩阵区域和

在这里插入图片描述

个人解

这道题和文章中第二题很像,这道题麻烦在下标对应。
思路:

  • 题意:answer中每一格表示的是:以mat[r][c]为中心的,边长为2k+1的正方形中所有元素(且在mat中)的和
  • 建立一个二维前缀和数组:dp[i][j]代表mat[0, 0][i, j]这个矩阵内的元素和
  • 然后利用这个前缀和数组来填写answer
  • 下标对应:初始化时:因为mat的元素是从下标[0, 0]开始的,所以dp[i][j]加的应该是mat[i - 1][j - 1]
  • 使用时:dp[1][1]才对应mat的第一个元素,所以,在使用dp的时候下标都要-1

用时:20:00
屎山代码:

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int m = mat.size(), n = mat[0].size();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));vector<vector<int>> answer(m, vector<int>(n, 0));// 初始化前缀和数组for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++)dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + mat[i - 1][j - 1];}for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){int x1 = max(0, i - k);int y1 = max(0, j - k);int x2 = min(m - 1, i + k);int y2 = min(n - 1, j + k);answer[i][j] = dp[x2 + 1][y2 + 1] - dp[x1][y2 + 1] - dp[x2 + 1][y1] + dp[x1][y1];}}return answer;}
};

时间复杂度:O( m ∗ n m*n mn)
空间复杂度:O( m ∗ n m*n mn)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

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

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

相关文章

深度解析:TextRenderManager——Cocos Creator艺术字体渲染核心类

一、类概述 TextRenderManager 是 Cocos Creator 中实现动态艺术字体渲染的核心单例类。它通过整合资源加载、缓存管理、异步队列和自动布局等功能&#xff0c;支持普通字符模式和图集模式两种渲染方案&#xff0c;适用于游戏中的动态文本&#xff08;如聊天内容、排行榜&…

【漫话机器学习系列】229.特征缩放对梯度下降的影响(The Effect Of Feature Scaling Gradient Descent)

特征缩放对梯度下降的影响&#xff1a;为什么特征标准化如此重要&#xff1f; 在机器学习和深度学习中&#xff0c;梯度下降是最常用的优化算法之一。然而&#xff0c;很多人在训练模型时会遇到收敛速度慢、训练不稳定的问题&#xff0c;其中一个重要原因就是特征未进行适当的…

【神经网络与深度学习】批标准化(Batch Normalization)和层标准化(Layer Normalization)

引言 在深度学习中&#xff0c;标准化技术&#xff08;Normalization&#xff09;是提高神经网络训练效率和性能的重要工具。其中&#xff0c;批标准化&#xff08;Batch Normalization, BN&#xff09;和层标准化&#xff08;Layer Normalization, LN&#xff09;是两种常用的…

OpenHarmony之电源管理子系统公共事件定义

OpenHarmony之电源管理子系统公共事件定义 电源管理子系统面向应用发布如下系统公共事件&#xff0c;应用如需订阅系统公共事件&#xff0c;请参考公共事件接口文档。 COMMON_EVENT_BATTERY_CHANGED 表示电池充电状态、电平和其他信息发生变化的公共事件的动作。 值&#x…

linux 环境下 c++ 程序打印 core dump 信息

linux 信号机制 软中断信号 Signal&#xff0c;简称信号&#xff0c;用来通知进程发生了异步事件&#xff0c;进程之间可以互相通过系统调用 kill 等函数来发送软中断信号。内核也可以因为内部事件而给进程发送信号&#xff0c;通知进程发生了某个事件。 进程对信号的处理 进…

Qt开发环境的安装与问题的解决(2)

文章目录 1. Qt开发环境安装的说明2. 通过安装包进行安装3. 通过在线下载程序 解决问题下载 https....网路错误问题解决开始安装--第一部分开始安装--第二部分 4. 建议配置环境变量&#xff08;非必须&#xff09;配置环境变量的意义 简介&#xff1a;这篇文章主要分享Qt开发环…

【每日EDA行业分析】2025年4月25日

深度总结&#xff1a;EDA 软件行业现状与发展趋势 一、引言 在半导体产业的复杂生态中&#xff0c;EDA 软件宛如一颗闪耀的明珠&#xff0c;它是集成电路设计的核心工具&#xff0c;贯穿芯片从设计构思到最终封装测试的全流程&#xff0c;其重要性不言而喻&#xff0c;被誉为…

flutter实践:比例对比线图实现

需求&#xff1a;flutter实现一个左右对比线图,带有动画效果 效果图&#xff1a; Widget _buildTop() {return Container(height: themeData.heightXl,padding: EdgeInsets.symmetric(horizontal: themeData.hSpacingMd),child: Row(mainAxisAlignment: MainAxisAlignment.spa…

测试基础笔记第十五天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、集合1.集合的定义二、使用集合列表去重 导包二、函数1.函数介绍2.定义函数3.调用函数4.函数实现登录案例5.函数的返回值 三、模块和包1.模块的概念(Module)2.模…

Linux中的shell脚本练习

1.判断字符串是否为空 #!/usr/bin/bash while : #:默认值为真 do read -p "请输入你的密码: " a pass123456 if [ -z $a ];thenecho "您输入的密码不能为空"exit 1 elseif [ $a $pass ];thenecho "登录成功"breakelseecho "您的密码输入有…

使用命令关闭Redis服务端

使用命令关闭Redis服务端。 命令 redis-cli -a 111111 -p 6379 shutdown 有些人redis的端口不是6379&#xff0c;那就自己查一下 参数解释&#xff1a; -a&#xff1a;Redis密码 -p&#xff1a;Redis端口 shutdown&#xff1a;关闭命令

嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)

文章目录 前言一、uC/OS简介二、工程移植2.1 下载ucos源码2.2 创建空白工程2.3 拷贝ucosiii源码文件2.3.1 UC-CONFIG2.3.2 UC-CPU2.3.3 UC-LIB2.3.4 UC-OS3 2.3 添加工程文件分组及路径2.4 代码首次编译2.5 源码修改2.5.1 cpu_cfg.h2.5.2 os_cpu_c.c2.5.3 lib_cfg.h2.5.4 sys.h…

TypeScript中的函数类型定义与类型约束

函数类型定义与类型约束 一、核心概念&#xff1a;类型别名与函数类型 1. 类型别名&#xff08;Type Alias&#xff09; 定义 类型别名使用 type 关键字为现有类型创建一个新名称&#xff0c;可以用于&#xff1a; 基础类型&#xff08;如 string、number&#xff09;&…

相机DreamCamera2录像模式适配尺寸

在开发中遇到 一个问题&#xff0c;相机切换视频模式时&#xff0c;预览时&#xff0c;界面不能充满屏幕两侧有黑边&#xff0c;客户要求修改&#xff0c;在此记录 一问题现象&#xff1a; 系统相机在视频模式下预览时如下现象如图1&#xff0c;期望现象如图2: 图1 …

SpringCloud组件——Gateway

一.网关 1.问题提出 我们通过Eureka&#xff0c;Nacos解决了服务注册&#xff0c;服务发现的问题&#xff0c;使用SpringCloud LoadBalance解决了负载均衡的问题&#xff0c;使用OpenFeign解决了远程调用的问题。 但是当前所有微服务的接口都是直接对外暴露的&#xff0c;可…

C#中构造器及属性的加载顺序

一.基本原则: 先加载静态构造函数和静态字段,后加载普通构造函数和普通字段;先加载基类再加载子类; 二.具体的加载顺序: 父类静态字段--->父类静态构造函数--->子类静态字段--->子类静态构造函数--->父类实例字段---> 父类实例构造函数--->子类实例字段-…

Python面试问题

一、Python 基础 1. Python 的特点 动态类型&#xff1a;变量无需声明类型。解释型语言&#xff1a;逐行解释执行。支持多种编程范式&#xff08;面向对象、函数式、过程式&#xff09;。 2. 列表&#xff08;List&#xff09;与元组&#xff08;Tuple&#xff09;的区别 特…

计算机视觉进化论:YOLOv12、YOLOv11与Darknet系YOLOv7的微调实战对比

摘要 YOLO系列作为实时目标检测领域的重要里程碑&#xff0c;持续引领速度与精度的平衡发展。本文围绕YOLOv7&#xff08;基于Darknet框架&#xff09;、YOLOv11及YOLOv12&#xff0c;系统、深入地对比了三款模型的架构创新、微调策略、核心技术及应用场景。我们详细解析了三者…

SQL Server 存储过程开发规范

SQL Server 存储过程开发规范&#xff08;高级版&#xff09; 1. 总则 1.1 目标 本规范旨在&#xff1a; 提高存储过程的事务一致性、异常可追踪性、错误透明度。 统一日志记录、错误码管理、链路追踪&#xff08;Trace ID&#xff09;。 支持复杂事务场景&#xff08;嵌套…

opendds的配置

配置的使用 文档中说明有4种使用配置的方式&#xff1a; 环境变量 命令行参数&#xff08;将覆盖环境变量中的配置&#xff09; 配置文件&#xff08;不会覆盖环境变量或命令行参数中的配置&#xff09; 用户调用的 API&#xff08;将覆盖现有配置&#xff09; 这里对开发…