大厂秋招真题【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组
文章目录
- 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组
- 题目描述与示例
- 题目描述
- 输入描述
- 输出描述
- 示例
- 输入
- 输出
- 说明
- 解题思路
- 代码
- Python
- Java
- C++
- 时空复杂度
- 华为OD算法/大厂面试高频题算法练习冲刺训练
【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组
题目描述与示例
题目描述
给定n个正整数组成的数组,求平均数正好等于k的最长连续子数组的长度。
输入描述
第一行输入两个正整数n和k,用空格隔开。
第二行输入n个正整数ai,用来表示数组。
1 <= n <= 200000
1 < = k, ai <= 10^9
输出描述
如果不存在任何一个连续子数组的平均数等于k,则输出-1。
否则输出平均数正好等于k的最长连续子数组的长度。
示例
输入
5 2
1 3 2 4 1
输出
3
说明
取前三个数即可,平均数为2。
解题思路
求连续子数组的平均数是一个比较难处理的过程,可以先做一步转换,把原数组nums中每一个元素都减去k得到一个新数组nums_new,那么题目就变成了求和为0的最长连续子数组的长度了。
由于nums_new中的元素有负数也有正数,该解题过程不能够用滑动窗口来解决,而应该使用前缀和结合哈希表来解决问题。
对数组nums_new构建前缀和数组pre_sum_lst,由于要求计算和为0的连续子数组,故我们仅需要找到pre_sum_lst中两个距离最远的相等元素。该过程可以通过一边遍历pre_sum_lst中的元素pre_sum,一边构建哈希表dic来进行,若
pre_sum不位于哈希表中,说明它是首次出现,将其下标i记录在哈希表中pre_sum已位于哈希表中,说明它之前已经出现过了,第一次出现的下标为dic[pre_sum],那么当前和为0的连续子数组的长度为i-dic[pre_sum],将其与ans比较并更新。
上述过程的核心代码如下
for i, pre_sum in enumerate(pre_sum_lst):if pre_sum not in dic:dic[pre_sum] = ielse:ans = max(ans, i-dic[pre_sum])
代码
Python
# 题目:【前缀和】美团2023秋招-平均数为k的最长连续子数组
# 作者:闭着眼睛学数理化
# 算法:前缀和/哈希表
# 代码有看不懂的地方请直接在群上提问from itertools import accumulate# 输入数组长度n,平均值k
n, k = map(int, input().split())
# 对输入的数组nums中的每一个元素进行-k的预处理,得到nums_new数组
nums_new = list(map(lambda x: int(x)-k, input().split()))
# 构建前缀和数组,注意首位需要填充一个0,表示不选取任何数字的前缀和
pre_sum_lst = [0] + list(accumulate(nums_new))# 构建哈希表,储存每个前缀和首次出现的下标
dic = dict()
# 初始化答案为-1
ans = -1
# 遍历前缀和数组中的所有下标和元素
for i, pre_sum in enumerate(pre_sum_lst):# 若pre_sum没有在哈希表中出现过# 则记录其第一次出现的下标if pre_sum not in dic:dic[pre_sum] = i# 若pre_sum在哈希表中出现过# 则计算当前下标i和其第一次出现下标dic[pre_sum]之差# 用于更新答案anselse:ans = max(ans, i-dic[pre_sum])print(ans)
Java
import java.util.HashMap;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt() - k; // 预处理,将每个元素减去 k}HashMap<Integer, Integer> prefixSumIndices = new HashMap<>();prefixSumIndices.put(0, -1); // 初始化前缀和为0的下标为-1int prefixSum = 0;int maxLength = -1;for (int i = 0; i < n; i++) {prefixSum += nums[i];if (prefixSumIndices.containsKey(prefixSum)) {int startIndex = prefixSumIndices.get(prefixSum) + 1; // 子数组的起始下标int currentLength = i - startIndex + 1; // 当前子数组长度maxLength = Math.max(maxLength, currentLength);} else {prefixSumIndices.put(prefixSum, i);}}System.out.println(maxLength);}
}
C++
#include <iostream>
#include <vector>
#include <unordered_map>using namespace std;int main() {int n, k;cin >> n >> k;vector<int> nums(n);for (int i = 0; i < n; ++i) {cin >> nums[i];nums[i] -= k; // 预处理,将每个元素减去 k}unordered_map<int, int> prefixSumIndices;prefixSumIndices[0] = -1; // 初始化前缀和为0的下标为-1int prefixSum = 0;int maxLength = -1;for (int i = 0; i < n; ++i) {prefixSum += nums[i];if (prefixSumIndices.find(prefixSum) != prefixSumIndices.end()) {int startIndex = prefixSumIndices[prefixSum] + 1; // 子数组的起始下标int currentLength = i - startIndex + 1; // 当前子数组长度maxLength = max(maxLength, currentLength);} else {prefixSumIndices[prefixSum] = i;}}cout << maxLength << endl;return 0;
}
时空复杂度
时间复杂度:O(N)。构建nums_new,前缀和数组pre_sum_lst,遍历前缀和数组pre_sum_lst,均只需一次遍历。
空间复杂度:O(N)。主要为前缀和数组pre_sum_lst和哈希表dic所占空间。
华为OD算法/大厂面试高频题算法练习冲刺训练
-
华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!
-
课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化
-
每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!
-
60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁
-
可上全网独家的欧弟OJ系统练习华子OD、大厂真题
-
可查看链接 大厂真题汇总 & OD真题汇总(持续更新)
-
绿色聊天软件戳
od1336了解更多
相关文章:
大厂秋招真题【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组
文章目录 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组题目描述与示例题目描述输入描述输出描述示例输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 【前缀和】美团20230826秋招T5-平均数为k的最长连续子数组 题目描…...
bazel远程构建(Remote Execution) --- linux安装Redis
采用源码安装方式 下载地址:Download | Redis,下载最新稳定版本。 step1: 下载最新稳定版本 wget https://download.redis.io/redis-stable.tar.gz step2: 解压安装 tar -xzvf redis-stable.tar.gz cd redis-stable make 执行完 make 命令后&#…...
Maven在开发中的使用及理解
在JAVA项目中,我们通常需要对项目的构建和依赖进行管理,这个时候我们就需要MAVEN来对项目进行支持。 一.MAVEN构建 在整个MAVEN构建的过程中包含以下环节,也对应IDEA中MAVEN的对应功能。 清理Maven Clean 清理,则代表删除上一…...
2023/10/30-LED灯驱动开发
k1.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" char kbuf[128] {}; unsigned int major; //定义三个指针指向映射后的虚拟内…...
华为OD 报文解压缩(100分)【java】B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
二、vue基础语法
一、模板语法 1、文本渲染 使用双花括号语法插入文本 <template><div><h3>msg: {{ message }}</h3></div> </template><script> export default {data() {return {message: "输出信息"}} } </script><style s…...
Java —— 程序逻辑控制
目录 1. 顺序结构 2. 分支结构 2.1 if 语句 2.1.1 语法格式1 2.1.2 语法格式2 2.1.3 语法格式3 2.2 switch 语句 3. 循环结构 3.1 while循环 3.2 break与continue 3.3 for循环 4. 输入输出 4.1 输出到控制台 格式化字符串 4.2 从键盘输入 5. 练习 和C语言类似地, Java的程序逻辑…...
I - Bob vs ATM(博弈论)
传送门:nefu_10-18 - Virtual Judge (vjudge.net) 思路: nim游戏的变形。 (())相当于在一堆n个石子中取任意个,sg(n)n; ((()))(())(),相当于可以在3堆石子分别为3&am…...
请解释一下 CSS3 的 Flexbox(弹性盒布局模型), 以及适用场景?
解析: CSS3的Flexbox(弹性盒布局模型)是一种强大的布局技术,用于创建灵活和响应式的布局。它解决了传统CSS布局模型在垂直和水平居中、等高列、自适应宽度等方面的一些挑战,使开发人员能够更轻松地构建各种复杂的布局。在下面的详…...
MYSQL 根据唯一索引键更新死锁问题
mysql 死锁问题及死锁权重分析 问题发生过程:1、生产发现死锁一次 语句为sql1:UPDATE table set data ‘123’ where business_no ABC; 该行数据的id1, business_no ABC tablbe 字段 id:主键 business_no为唯一索引字段,其…...
Appium+python+unittest搭建UI自动化框架!
阅读本小节,需要读者具备如下前提条件: 1. 掌握一种编程语言基础,如java、python等。 2. 掌握一种单元测试框架,如java语言的testng框架、python的unittest框架。 3. 掌握目前主流的UI测试框架,移动端APP测试框架Appiu…...
使用kubekey部署k8s集群和kubesphere、在已有k8s集群上部署kubesphere
目录 前言什么是kubekey(简称kk)单节点上安装 kubesphere(all in one 快速熟悉kubesphere)部署 kubernetes和和kubesphere 多节点安装部署 kubernetes和和kubesphere 离线安装k8s v1.22.17和kubesphere v3.3.2联网-在已有k8s集群上…...
React useMemo useCallback useEffect 的区别(保姆级教程)
因个人工作原因,在2023年学起了React TS 这个 “前端大佬” “高阶玩家” 标配的技术栈,一套学习下来个人总结就是:React真特么难用!传染病式的渲染逻辑是真让人难受!维护之前的代码就是深渊!难怪React项目…...
网络安全中的人工智能:优点、缺点、机遇和危险
2022 年秋天,人工智能在商业领域爆发,引起了轰动,不久之后,似乎每个人都发现了 ChatGPT 和 DALL-E 等生成式 AI 系统的新的创新用途。世界各地的企业开始呼吁将其集成到他们的产品中,并寻找使用它来提高组织效率的方法…...
36 机器学习(四):异常值检测|线性回归|逻辑回归|聚类算法|集成学习
文章目录 异常值检测箱线图z-score 保存模型 与 使用模型回归的性能评估线性回归正规方程的线性回归梯度下降的线性回归原理介绍L1 和 L2 正则化的介绍api介绍------LinearRegressionapi介绍------SGDRegressor 岭回归 和 Lasso 回归 逻辑回归基本使用原理介绍正向原理介绍损失…...
maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories
前言 略 说明 新设备上安装了mvn 3.8.5,编译新项目出错: [ERROR] Non-resolvable parent POM for com.admin.project:1.0: Could not transfer artifact com.extend.parent:pom:1.6.9 from/to maven-default-http-blocker (http://0.0.0.0/): Bl…...
盒式交换机堆叠配置
目录 1.配置环形拓扑堆叠 2.设备组建堆叠 3.设备组件堆叠 堆叠 istack,是指将多台支持堆叠特性的交换机设备组合在一起,从逻辑上组合成一台交换设备。如图所示,SwitchA与 SwitchB 通过堆叠线缆连接后组成堆叠 istack,对于上游和…...
openEuler 服务器安装 JumpServer (all-in-one 模式)
openEuler 服务器安装 JumpServer JumpServer 简介什么是 JumpServer ?JumpServer 的各种类型资产JumpServer 产品特色或优势JumpServer 符合 4A 规范 JumpServer 系统架构应用架构组件说明 JumpServer 安装部署环境要求网络端口网络端口列表防火墙常用命令 在线脚本…...
vue3后台管理系统之路由守卫
下载进度条 pnpm install nprogress //路由鉴权:鉴权,项目当中路由能不能被的权限的设置(某一个路由什么条件下可以访问、什么条件下不可以访问) import router from /router import setting from ./setting // eslint-disable-next-line typescript-eslint/ban-ts-comment /…...
微信小程序连接数据库与WXS的使用
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯Ἲ…...
终极指南:如何利用LCUI实现Flexbox与Block布局的完美结合
终极指南:如何利用LCUI实现Flexbox与Block布局的完美结合 【免费下载链接】LCUI C library for building user interfaces 项目地址: https://gitcode.com/gh_mirrors/lc/LCUI LCUI是一个强大的C语言用户界面库,它将Flexbox与Block布局无缝融合&a…...
LLM在Verilog代码生成中的技术演进与实践
1. LLM在Verilog代码生成中的技术演进作为一名在数字电路设计领域工作多年的工程师,我见证了硬件描述语言(Verilog)设计方式的革命性变化。传统的手动编写RTL代码方式正逐渐被基于大型语言模型(LLM)的自动化方法所补充甚至替代。Verilog代码生成不同于普通编程语言&…...
3步解锁CrossOver游戏兼容性:Mac游戏优化完整方案
3步解锁CrossOver游戏兼容性:Mac游戏优化完整方案 【免费下载链接】CXPatcher A patcher to upgrade Crossover dependencies and improve compatibility 项目地址: https://gitcode.com/gh_mirrors/cx/CXPatcher 还在为Mac上运行Windows游戏时的卡顿和兼容性…...
从写实到二次元:用Stable Diffusion打造你的专属AI画师,附保姆级模型搭配方案
从写实到二次元:用Stable Diffusion打造你的专属AI画师,附保姆级模型搭配方案 在数字艺术创作领域,Stable Diffusion已经从一个简单的AI绘画工具演变为能够模拟不同画师风格的强大平台。就像专业工作室会根据项目需求组建不同特长的艺术家团队…...
如何3分钟完成Windows和Office智能激活?KMS_VL_ALL_AIO终极指南
如何3分钟完成Windows和Office智能激活?KMS_VL_ALL_AIO终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?每次重装系统后都要面对繁琐…...
每日 AI 研究简报 · 2026-04-24
(本文借助 AI 大模型及工具辅助整理) 一句话总结:OpenAI 发布 GPT-5.5,Google 声称 75% 新代码由 AI 生成,DeepSeek V4 挑战美国领先模型,人形机器人在中国半程马拉松创纪录。 🌊 AI 动态与趋…...
Realistic Vision V5.1虚拟摄影棚效果展示:不同肤色/发色/瞳色人像生成能力
Realistic Vision V5.1虚拟摄影棚效果展示:不同肤色/发色/瞳色人像生成能力 1. 项目概述 Realistic Vision V5.1虚拟摄影棚是基于当前最先进的写实风格生成模型开发的本地化工具,能够生成媲美专业单反相机拍摄效果的人像照片。该工具特别针对不同人种特…...
Metorial:基于MCP协议的AI智能体集成平台,一行代码连接外部工具
1. 项目概述:当AI智能体需要“手”和“眼” 如果你正在构建一个AI智能体应用,比如一个能自动处理邮件的客服机器人,或者一个能分析数据并生成报告的分析助手,你很快会遇到一个核心问题:这个智能体如何与外部世界交互&…...
告别手动截图!用OpenCV + Python自动分割手写笔记,5分钟搞定电子化整理
5分钟极简工作流:用PythonOpenCV打造智能手写笔记分割器 每次整理手写笔记时,最头疼的莫过于要把密密麻麻的纸质内容转为电子版。上周我翻出三年前的课堂笔记想数字化保存,结果花了两小时手动截图——直到发现OpenCV这个宝藏工具。今天分享的…...
新手避坑指南:用Vulnhub DC-3靶场练习渗透测试时,我踩过的5个坑及解决方法
新手渗透测试实战:从DC-3靶场中汲取的5个关键教训 初识DC-3靶场的挑战 当我第一次接触Vulnhub的DC-3靶机时,那种既兴奋又忐忑的心情至今记忆犹新。作为一个刚踏入渗透测试领域的新手,我原以为按照教程步骤就能轻松通关,但现实却给…...
