区间和数量统计 之 前缀和+哈希表

文章目录

  • 1512.好数对的数目
  • 2845.统计趣味子数组的数目
  • 1371.每个元音包含偶数次的最长子字符串

  • 区间和的数量统计是一类十分典型的问题:记录左边,枚举右边策略
  • 前置题目:统计nums[j]==nums[i]的对数
  • 进阶版本:统计子数组和%modulo == k的子数组的数目
  • 为什么要使用到这个哈希表
  • 答:对于有限状态的数量的存储,并且对于数量的统计,需要初始化store[0]=1,当然对于长度的统计,那么初始化的情况就是store[0] = -1(存储的是下标)
  • 为什么要使用到这个前缀和
  • 答:方便计算这个区间的和的情况,我们所使用的前缀和,就是通过两个前缀的状态的差求解出中间状态的情况!!!!

1512.好数对的数目

1512.好数对的数目

在这里插入图片描述

  • 典型的哈希表问题,先更新答案,再更新哈希表
from collections import defaultdict
class Solution:def numIdenticalPairs(self, nums: List[int]) -> int:n = len(nums)store = defaultdict(int)ans = 0for i in range(n):ans += store[nums[i]]store[nums[i]] += 1return ans

2845.统计趣味子数组的数目

2845.统计趣味子数组的数目

在这里插入图片描述

  • 子数组区间和取模的问题,还是采用记录左边,枚举右边策略
  • 不过就是要注意,我们其实是只用枚举(前缀和-k)%modulo的数是否在左边出现,更新的时候是前缀和%modulo的数量+1
from collections import defaultdict
class Solution:def countInterestingSubarrays(self, nums: List[int], modulo: int, k: int) -> int:n = len(nums)# 预处理,将满足的位置变为1,否则就是0 for i in range(n):if nums[i] % modulo == k:nums[i] = 1else:nums[i] = 0 # 哈希表存储,k == 0 的情况得另外处理,当k!=0的时候,就是一个哈希表+前缀和的问题store = defaultdict(int)# 记录的是对应的取模的结果的最早的下标# 区间和取模问题store[0] = 1tmp,ans = 0,0for i in range(n):tmp = tmp + nums[i]if tmp >= k:ans += store[(tmp - k) % modulo]store[tmp  % modulo ] += 1return ans

思考

  • 如果题目求解的是子数组的和是modulo的倍数的子数组个数,应该如何求解?
  • 答:那其实就更加简单了,我们只需记录nums[i]%modulo的结果在左边的数量即可,不过要注意初始化的时候得store[0] = 1

1371.每个元音包含偶数次的最长子字符串

1371.每个元音包含偶数次的最长子字符串

在这里插入图片描述

  • 哈希表存储的是下标,所以初始化的时候注意得是store[0]=-1
  • 我们只需关注这个字符串中元音的个数的情况,当然,由于两个前缀相同的状态的差的字符串中元音的个数肯定是偶数,所以我们采用前缀和来求解出字符串中元音的个数的状态,由于涉及到奇数偶数,所以采用异或运算
class Solution:def findTheLongestSubstring(self, s: str) -> int:n = len(s)mapper = {"a" : 1,"e" : 2,"i" : 4,"o" : 8,"u" : 16}# 使用哈希表存储异或结果出现的第一次的下标seen = {0:-1}# 记录结果ans = cur = 0for i in range(n):if s[i] in mapper:cur ^= mapper[s[i]]# 判断当前的cur是否是第一次出现if cur in seen:ans = max(ans,i-seen[cur])else:seen[cur] = ireturn ans

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

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

相关文章

PCB 制造流程分步指南

最近的一次PCB打板经历,板厂工程人员告知丝印偏到焊盘上了,内部让我评估是否可以继续贴片。 于是发一期文章,介绍一下PCB制造流程。 PCB制造工艺 PCB设计获得批准且制造商收到最终制造文件后,PCB制造或生产就开始了。此时&…

python实现简单的UI交互

文章目录 1. 基础打印 覆盖同一行2. 多行动画效果3. 彩色文本(Windows/macOS/Linux)4. 输入交互5. 异步输入与非阻塞显示6. 高级控制台 UI 库 可以通过控制台打印实现简单的「伪UI交互」,尤其适合展示进度、动态文本或轻量级状态反馈。以下是…

AI与思维模型【77】——PDCA思维模型

一、定义 PDCA思维模型是一种用于持续改进和优化工作流程、项目实施以及问题解决的科学管理方法。它由四个英文字母组成,分别代表计划(Plan)、执行(Do)、检查(Check)和处理(Act&…

10天学会嵌入式技术之51单片机-day-3

第九章 独立按键 按键的作用相当于一个开关,按下时接通(或断开),松开后断开(或接通)。实物图、原理图、封装 9.2 需求描述 通过 SW1、SW2、SW3、SW4 四个独立按键分别控制 LED1、LED2、LED3、LED4 的亮…

vite+vue2+elementui构建之 package.json

webpack版本太低,构建依赖太多,头大。 各种查阅资料,弄了一份直通构建vite构建elementUi核心文件, 构建基于开源若依vue2vue3版本改造,感谢开源,感谢若依。 vitevue2elementui构建之 vite.config.js-CSD…

提升变电站运维效率:安科瑞无线测温系统创新应用

一、引言 变电站作为电力系统的关键枢纽,承担着变换电压、分配电能以及控制电力流向等重要任务。在变电站的运行过程中,电气设备的接点温度监测至关重要。过热问题可能由多种因素引发,如电阻过大、接头质量欠佳、衔接不紧密、物理老化等&…

DMA的三种传输功能

①内存到内存 #include "dma.h" #include "stdio.h"#define BUF_SIZE 16uint32_t src_buf[BUF_SIZE] {0x00000000,0x11111111,0x22222222,0x33333333,0x44444444,0x55555555,0x66666666,0x77777777,0x88888888,0x99999999,0xAAAAAAAA,0xBBBBBBBB,0xCCCCCCC…

【MySQL】MySQL 表的增删改查(CRUD)—— 下篇(内含聚合查询、group by和having子句、联合查询、插入查询结果)

目录 1. 插入查询结果 2 聚合查询 (行与行之间运算) count 计算查询结果的行数 sum 求和 avg 求平均值 max 最大值 min 最小值 【小结】 3. group by 子句 分组 where 条件 having 条件 4. 联合查询(多表查询) 内连接…

“思考更长时间”而非“模型更大”是提升模型在复杂软件工程任务中表现的有效途径 | 学术研究系列

作者:明巍/临城/水德 还在为部署动辄数百 GB 显存的庞大模型而烦恼吗?还在担心私有代码库的安全和成本问题吗?通义灵码团队最新研究《Thinking Longer, Not Larger: Enhancing Software Engineering Agents via Scaling Test-Time Compute》…

电脑屏幕录制软件Captura源码编译(Win10,VS2022)

屏幕录像的意义: 教育教学方面 制作教学资源:教师可以通过录制屏幕来制作教学视频,演示软件操作、讲解复杂的知识点等。学生可以随时观看这些视频,便于复习和巩固知识,尤其对于一些抽象的概念或难以在课堂上一次性掌握…

记一次调用大华抓拍SDK并发优化

目录 一、问题分析 二、解决思路 三、贴代码 四、总结 一、问题分析 按惯例上问题: 设备告警采用高电平持续模式:一次开,不主动关就一直处于告警状态。 并发时多个请求下发 setDVRAlarmOutConfig,导致状态混乱。 “开 -&g…

Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰

本次使用图片来源于百度 import cv2 import time import numpy as np import pywtfrom PIL import Image, ImageEnhance#-i https://pypi.mirrors.ustc.edu.cn/simpledef super_resolution(input_path, output_path, model_path, scale4):# 初始化超分辨率模型sr cv2.dnn_su…

12个HPC教程汇总!从入门到实战,覆盖分子模拟/材料计算/生物信息分析等多个领域

在科学研究、工程仿真、人工智能和大数据分析等领域,高性能计算 (High Performance Computing, HPC) 正扮演着越来越重要的角色。它通过并行处理、大规模计算资源的整合,极大提升了计算效率,使原本耗时数日的任务能够在数小时内完成。 随着计…

使用Autocannon.js进行HTTP压测

目录 一、为什么选择Autocannon? 二、五分钟快速上手 1. 环境准备 2. 发起首个压测 3. 解读测试报告 三、高阶场景实战 场景1:POST请求压测 场景2:阶梯式压力测试 场景3:编程式集成测试 四、结果深度分析指南 1. 延迟分…

pnpm install报错:此系统上禁止运行脚本

依赖安装 报错信息: pnpm : 无法加载文件 C:\Users\XXX\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 …

第9章 多模态大语言模型

​​​​​​第1章 对大型语言模型的介绍第2章 分词和嵌入第3章 解析大型语言模型的内部机制第4章 文本分类第5章 文本聚类与主题建模第6章 提示工程第7章 高级文本生成技术与工具第8章 语义搜索与检索增强生成第10章 构建文本嵌入模型第11章 面向分类任务的表示模型微调第12章…

Python 绘图代码解析:用 Turtle 和 Colorsys 打造绚丽图案

注:本文为作者原创文章,未经许可禁止转载。 Python 绘图代码解析:用 Turtle 和 Colorsys 打造绚丽图案 在 Python 的世界里,有许多有趣的库可以用来创造精美的图形。今天,我们就来详细剖析一段使用turtle库和colorsys库的代码,看看它是如何绘制出独特图案的。 一、库的导…

RTMP 入门指南

1. RTMP 基础概念​​ ​​核心角色​​: ​​推流端(Publisher)​​:将音视频数据推送到服务器的设备(如OBS、手机APP)。​​服务器(RTMP Server)​​:接收推流并分发给…

Java Stream流 常用方法

Map 修改 用于修改集合里的值 public void findData(){ArrayList<String> list new ArrayList<>();list.add("张三");list.add("李四");List<String> collect list.stream().map(s -> s "a").collect(Collectors.toLi…

巧记英语四级单词 Unit5-上【晓艳老师版】

count 数&#xff0c; counter n.计算器&#xff0c;柜台 a.相反的 数数的东西就是计算器&#xff0c;在哪数&#xff0c;在柜台里面数&#xff1b;你和售货员的关系就是相反的(一个买货&#xff0c;一个卖货account n.账户&#xff0c;账号 一再的数accountant n.会计 一再的…