新闻详情

新闻详情

首页 / 资讯中心 / 详情

【2026OD新机考】【固定滑窗】20260830-小花获胜的奶茶【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

发布时间:2026/11/15 3:50:31来源:尧图网络
【2026OD新机考】【固定滑窗】20260830-小花获胜的奶茶【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码PythonJavaCCNode JavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【2026华为OD机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言PyJavaCppCJsGo】【2026年华为OD机考最新政策】2026年新规改革最新变化 | 学习策略 | 考试时间 | 出题形式 | 输入形式 | 考前流程 | 双机位摆放【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言PyJavaCppCJsGo】【华为OD机考】2025C2025B2024ED卷真题【完全原创题解 | 详细考点分类 | 不断更新题目】【华为OD笔试】双机位A2025C2025B2024ED卷真题机考套题汇总【真实反馈不断更新限时免费】【华为OD笔试】2024ED卷命题规律解读【分析500场OD笔试考点总结】【华为OD流程】性格测试选项注意事项题目练习网址【固定滑窗】20260830-小花获胜的奶茶题目描述与示例题目描述小菊和小花是好朋友他们经常一起玩游戏。这天他们玩一个数字游戏获胜可以获得对方1杯奶茶。游戏规则小菊在纸上写了一排数组小花需要从中选择连续k个数字使得这k个数字的和最大。小花正确找到最大的值就是获胜小菊则提供1杯奶茶小花想获胜喝奶茶请你帮助她。输入描述参数1int数组给出的一排数字参数2int整数k约束-2147483648 单个数字 2147483647 0 一排数字长度 1063 1 k 一排数字的长度输出描述最大k个数字和示例输入1,3,8,6,4,103输出20说明6410三个数和最大6 4 10 20解题思路这是一个非常典型的固定滑窗问题。容易想到如果我们采用暴力思路枚举所有长度为k的连续子数组并逐个求和那么时间复杂度会达到O(n × k)注意到题目中数组长度最大接近10^3虽然不算极大但题目显然希望我们掌握更优的通用解法。换句话说我们应该利用相邻窗口之间的重叠部分来优化计算当窗口从[i, ik-1]向右滑动到[i1, ik]时这两个窗口里的元素几乎完全一样变化的仅仅是左侧的nums[i]离开了窗口右侧的nums[ik]进入了窗口。因此新的窗口和可以由旧窗口和的基础上在O(1)时间内推导出来而不需要重新遍历k个元素。直接考虑滑窗三问三答即可解决该问题属于非常典型的模板题。代码PythonfromtypingimportList# 题目【固定滑窗】20260830-小花获胜的奶茶# 分值100# 作者闭着眼睛学数理化# 算法固定滑窗# 代码看不懂的地方请直接在群上提问# 代码中的类名、方法名、参数名已经指定# param nums: 给出的一排数字# param k: 需要选择的连续数字个数# return: 连续 k 个数字的最大和classSolution:defsolve(self,nums:List[int],k:int)-int:nlen(nums)# 初始化第一个窗口的累加和即下标 [0, k-1] 这 k 个数字的总和cur_sum0foriinrange(k):cur_sumnums[i]# 初始状态下最大和就是第一个窗口的和max_sumcur_sumforrightinrange(k,n):# A1将 nums[right] 加入当前窗口总和完成窗口右侧的扩张cur_sumnums[right]# A2在固定滑窗中左侧边界 left 始终等于 right - k# 换句话说最左边的那个元素已经滑出了窗口需要从总和中减掉leftright-k cur_sum-nums[left]# A3窗口移动完成后用当前窗口和去更新历史最大和# 注意到题目只要求返回最大和不要求返回起始索引因此直接取 max 即可ifcur_summax_sum:max_sumcur_sumreturnmax_sum# 以下内容为 LeetCode 核心代码模式转为 ACM 模式所需代码# 请在 algomooc oj 上直接使用在实际考试中无需编写if__name____main__:numslist(map(int,input().strip().split(,)))kint(input().strip())print(Solution().solve(nums,k))Javaimportjava.util.Scanner;// 题目【固定滑窗】20260830-小花获胜的奶茶// 分值100// 作者闭着眼睛学数理化// 算法固定滑窗// 代码看不懂的地方请直接在群上提问// 代码中的类名、方法名、参数名已经指定// param nums: 给出的一排数字// param k: 需要选择的连续数字个数// return: 连续 k 个数字的最大和classSolution{publiclongsolve(int[]nums,intk){intnnums.length;// 初始化第一个窗口的累加和即下标 [0, k-1] 这 k 个数字的总和longcur_sum0;for(inti0;ik;i){cur_sumnums[i];}// 初始状态下最大和就是第一个窗口的和longmax_sumcur_sum;for(intrightk;rightn;right){// A1将 nums[right] 加入当前窗口总和完成窗口右侧的扩张cur_sumnums[right];// A2在固定滑窗中左侧边界 left 始终等于 right - k// 换句话说最左边的那个元素已经滑出了窗口需要从总和中减掉intleftright-k;cur_sum-nums[left];// A3窗口移动完成后用当前窗口和去更新历史最大和// 注意到题目只要求返回最大和不要求返回起始索引因此直接取 max 即可if(cur_summax_sum){max_sumcur_sum;}}returnmax_sum;}}// 以下内容为LeetCode核心代码模式转为ACM模式所需代码// 请在algomooc oj上直接使用在实际考试中无需编写publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringlinesc.nextLine();String[]partsline.split(,);int[]numsnewint[parts.length];for(inti0;iparts.length;i){nums[i]Integer.parseInt(parts[i].trim());}intkInteger.parseInt(sc.nextLine().trim());System.out.println(newSolution().solve(nums,k));}}C#includeiostream#includevector#includestring#includesstreamusingnamespacestd;// 题目【固定滑窗】20260830-小花获胜的奶茶// 分值100// 作者闭着眼睛学数理化// 算法固定滑窗// 代码看不懂的地方请直接在群上提问// 代码中的类名、方法名、参数名已经指定// param nums: 给出的一排数字// param k: 需要选择的连续数字个数// return: 连续 k 个数字的最大和classSolution{public:longlongsolve(vectorintnums,intk){intnnums.size();// 初始化第一个窗口的累加和即下标 [0, k-1] 这 k 个数字的总和longlongcur_sum0;for(inti0;ik;i){cur_sumnums[i];}// 初始状态下最大和就是第一个窗口的和longlongmax_sumcur_sum;for(intrightk;rightn;right){// A1将 nums[right] 加入当前窗口总和完成窗口右侧的扩张cur_sumnums[right];// A2在固定滑窗中左侧边界 left 始终等于 right - k// 换句话说最左边的那个元素已经滑出了窗口需要从总和中减掉intleftright-k;cur_sum-nums[left];// A3窗口移动完成后用当前窗口和去更新历史最大和// 注意到题目只要求返回最大和不要求返回起始索引因此直接取 max 即可if(cur_summax_sum){max_sumcur_sum;}}returnmax_sum;}};// 以下内容为LeetCode核心代码模式转为ACM模式所需代码// 请在algomooc oj上直接使用在实际考试中无需编写intmain(){string line;getline(cin,line);vectorintnums;string token;stringstreamss(line);while(getline(ss,token,,)){nums.push_back(stoi(token));}intk;cink;Solution solution;coutsolution.solve(nums,k)endl;return0;}C#includestdio.h#includestdlib.h#includestring.h// 题目【固定滑窗】20260830-小花获胜的奶茶// 分值100// 作者闭着眼睛学数理化// 算法固定滑窗// 代码看不懂的地方请直接在群上提问// 代码中的类名、方法名、参数名已经指定// param nums: 给出的一排数字// param k: 需要选择的连续数字个数// return: 连续 k 个数字的最大和structSolution{};voidtrim_newline(char*str){size_tlenstrlen(str);while(len0(str[len-1]\n||str[len-1]\r)){str[len-1]\0;len--;}}longlongsolve(structSolution*solution,int*nums,intnumsSize,intk){intnnumsSize;// 初始化第一个窗口的累加和即下标 [0, k-1] 这 k 个数字的总和longlongcur_sum0;for(inti0;ik;i){cur_sumnums[i];}// 初始状态下最大和就是第一个窗口的和longlongmax_sumcur_sum;for(intrightk;rightn;right){// A1将 nums[right] 加入当前窗口总和完成窗口右侧的扩张cur_sumnums[right];// A2在固定滑窗中左侧边界 left 始终等于 right - k// 换句话说最左边的那个元素已经滑出了窗口需要从总和中减掉intleftright-k;cur_sum-nums[left];// A3窗口移动完成后用当前窗口和去更新历史最大和// 注意到题目只要求返回最大和不要求返回起始索引因此直接取 max 即可if(cur_summax_sum){max_sumcur_sum;}}returnmax_sum;}// 以下内容为LeetCode核心代码模式转为ACM模式所需代码// 请在algomooc oj上直接使用在实际考试中无需编写intmain(){charline[1024]{0};if(fgets(line,sizeof(line),stdin)NULL){return0;}trim_newline(line);intcapacity16;int*nums(int*)malloc(capacity*sizeof(int));intnumsSize0;char*tokenstrtok(line,,);while(token!NULL){intvalatoi(token);if(numsSizecapacity){capacity*2;nums(int*)realloc(nums,capacity*sizeof(int));}nums[numsSize]val;tokenstrtok(NULL,,);}chark_line[64]{0};intk0;if(fgets(k_line,sizeof(k_line),stdin)!NULL){trim_newline(k_line);sscanf(k_line,%d,k);}structSolutionsolution;longlongresultsolve(solution,nums,numsSize,k);printf(%lld\n,result);free(nums);return0;}Node JavaScript// 题目【固定滑窗】20260830-小花获胜的奶茶// 分值100// 作者闭着眼睛学数理化// 算法固定滑窗// 代码看不懂的地方请直接在群上提问// 代码中的类名、方法名、参数名已经指定// param nums: 给出的一排数字// param k: 需要选择的连续数字个数// return: 连续 k 个数字的最大和classSolution{solve(nums,k){constnnums.length;// 初始化第一个窗口的累加和即下标 [0, k-1] 这 k 个数字的总和letcur_sum0;for(leti0;ik;i){cur_sumnums[i];}// 初始状态下最大和就是第一个窗口的和letmax_sumcur_sum;for(letrightk;rightn;right){// A1将 nums[right] 加入当前窗口总和完成窗口右侧的扩张cur_sumnums[right];// A2在固定滑窗中左侧边界 left 始终等于 right - k// 换句话说最左边的那个元素已经滑出了窗口需要从总和中减掉letleftright-k;cur_sum-nums[left];// A3窗口移动完成后用当前窗口和去更新历史最大和// 注意到题目只要求返回最大和不要求返回起始索引因此直接取 max 即可if(cur_summax_sum){max_sumcur_sum;}}returnmax_sum;}}// 以下内容为LeetCode核心代码模式转为ACM模式所需代码// 请在algomooc oj上直接使用在实际考试中无需编写constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constlines[];rl.on(line,(line){lines.push(line);if(lines.length2){rl.close();}});rl.on(close,(){constnumslines[0].split(,).map(sparseInt(s.trim()));constkparseInt(lines[1].trim());console.log(newSolution().solve(nums,k));});Gopackagemainimport(bufiofmtosstrconvstrings)// 题目【固定滑窗】20260830-小花获胜的奶茶// 分值100// 作者闭着眼睛学数理化// 算法固定滑窗// 代码看不懂的地方请直接在群上提问// 代码中的类名、方法名、参数名已经指定// param nums: 给出的一排数字// param k: 需要选择的连续数字个数// return: 连续 k 个数字的最大和typeSolutionstruct{}func(s*Solution)solve(nums[]int,kint)int{n:len(nums)// 初始化第一个窗口的累加和即下标 [0, k-1] 这 k 个数字的总和cur_sum:0fori:0;ik;i{cur_sumnums[i]}// 初始状态下最大和就是第一个窗口的和max_sum:cur_sumforright:k;rightn;right{// A1将 nums[right] 加入当前窗口总和完成窗口右侧的扩张cur_sumnums[right]// A2在固定滑窗中左侧边界 left 始终等于 right - k// 换句话说最左边的那个元素已经滑出了窗口需要从总和中减掉left:right-k cur_sum-nums[left]// A3窗口移动完成后用当前窗口和去更新历史最大和// 注意到题目只要求返回最大和不要求返回起始索引因此直接取 max 即可ifcur_summax_sum{max_sumcur_sum}}returnmax_sum}// 以下内容为LeetCode核心代码模式转为ACM模式所需代码// 请在algomooc oj上直接使用在实际考试中无需编写funcmain(){reader:bufio.NewReader(os.Stdin)line,_:reader.ReadString(\n)linestrings.TrimSpace(line)parts:strings.Split(line,,)nums:make([]int,len(parts))fori:0;ilen(parts);i{num,_:strconv.Atoi(strings.TrimSpace(parts[i]))nums[i]num}kLine,_:reader.ReadString(\n)kLinestrings.TrimSpace(kLine)k,_:strconv.Atoi(kLine)sol:Solution{}fmt.Println(sol.solve(nums,k))}时空复杂度时间复杂度O(n)其中n为数组长度。初始化第一个窗口需要O(k)后续滑动需要O(n-k)两者相加整体为O(n)空间复杂度O(1)仅使用了cur_sum、max_sum、left、right等常数个额外变量没有借助任何与数据规模相关的辅助空间。华为OD算法/大厂面试高频题算法练习冲刺训练华子OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名目前已服务1000同学成功上岸课程讲师为全网200w粉丝编程博主吴师兄学算法以及小红书头部编程博主闭着眼睛学数理化90天陪伴式学习100直播课时300动画图解视频500LeetCode经典题500华为OD真题/大厂真题还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉