获取利润第K大的值(Java /Py/C/C/Js/Go)题解华为OD机试真题 新系统 华为OD上机考试真题新系统 11月1号 100分题型华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录机考题库 算法考点详解题目内容小张是一名金融交易员现在记录了某只股票连续n个交易日每天的“涨跌金额”上涨为正、下跌为负、横盘为0)如果某次交易是“在某个交易日买入、之后某个交易日卖出”那么这笔交易的利润就等于这两点之间所有日子的涨跌金额之和。小张正在设计一个交易策略想找出所有可行交易时段里利润排名第K大的那个利润值以此观察收益分布。请你设计一个程序帮小张求出这个第K大的交易利润值。注意一次交易为买入日i→卖出日j(0ijn-1)”利润 a[i] a[i1] … a[i]只要买入日/卖出日不同就视为不同交易时段利润相同的不同时段也分别计入排名并列依次占用排名数组可包含负数因此利润可正、可负、可为0均按排名取第 K大的值输入描述第一行整型数组每个元素为当日涨跌金额可为负长度1 n 1000;第二行k正整数值范围1Kn*(n1)/2不超过可行交易总数输出描述整型数值表示所有可行交易利润即所有连续子数组和中按从大到小排序后第K大的那个利润值样例1输入3 -2 5 3输出3说明(0, 0): 收益3 (0, 1): 收益1 (0, 2): 收益6 (1, 1): 收益-2 (1, 2): 收益3 (2, 2): 收益5 可获得的收益6 5 3 3 1 -2 第k大收益为3题解思路前缀和 枚举核心思路枚举每一个连续子数组计算区间和保存到数组中最后从大到小进行排序取第k个值即可。计算每个子数组区间和可通过前缀和进行加速sum(i, j) prefix[j 1] - prefix[i]注意区间和可能超过int的数据范围造成溢出应使用数据范围的数据类型进行处理。C#includebits/stdc.h#includevectorusingnamespacestd;usinglllonglong;// 通用 切割函数 函数 将字符串str根据delimiter进行切割vectorintsplit(conststringstr,conststringdelimiter){vectorintresult;size_t start0;size_t endstr.find(delimiter);while(end!string::npos){result.push_back(stoi(str.substr(start,end-start)));startenddelimiter.length();endstr.find(delimiter,start);}// 添加最后一个部分result.push_back(stoi(str.substr(start)));returnresult;}longlongsolve(vectorinta,intk){intna.size();// 计算前缀和vectorllpre(n1,0);for(inti0;in;i){pre[i1]pre[i]a[i];}// 枚举所有连续子数组和vectorllsums;for(inti0;in;i){for(intji;jn;j){sums.push_back(pre[j1]-pre[i]);}}// 从大到小排序sort(sums.begin(),sums.end(),greaterll());returnsums[k-1];}intmain(){string line;getline(cin,line);vectorintasplit(line, );intk;cink;coutsolve(a,k);return0;}Javaimportjava.util.*;publicclassMain{// 计算第 k 大的连续子数组和staticlongsolve(int[]a,intk){intna.length;// 计算前缀和long[]prenewlong[n1];for(inti0;in;i){pre[i1]pre[i]a[i];}// 枚举所有连续子数组和ListLongsumsnewArrayList();for(inti0;in;i){for(intji;jn;j){sums.add(pre[j1]-pre[i]);}}// 从大到小排序sums.sort(Collections.reverseOrder());returnsums.get(k-1);}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringlinesc.nextLine();String[]partsline.trim().split(\\s);int[]anewint[parts.length];for(inti0;iparts.length;i){a[i]Integer.parseInt(parts[i]);}intksc.nextInt();System.out.println(solve(a,k));sc.close();}}Python# 计算第 k 大的连续子数组和defsolve(a,k):nlen(a)# 计算前缀和pre[0]*(n1)foriinrange(n):pre[i1]pre[i]a[i]# 枚举所有连续子数组和sums[]foriinrange(n):forjinrange(i,n):sums.append(pre[j1]-pre[i])# 从大到小排序sums.sort(reverseTrue)returnsums[k-1]if__name____main__:alist(map(int,input().split()))kint(input())print(solve(a,k))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letlines[];rl.on(line,(line){lines.push(line.trim());});rl.on(close,(){constalines[0].split(/\s/).map(Number);constkNumber(lines[1]);console.log(solve(a,k));});// 计算第 k 大的连续子数组和functionsolve(a,k){constna.length;// 计算前缀和constprenewArray(n1).fill(0);for(leti0;in;i){pre[i1]pre[i]a[i];}// 枚举所有连续子数组和constsums[];for(leti0;in;i){for(letji;jn;j){sums.push(pre[j1]-pre[i]);}}// 从大到小排序sums.sort((a,b)b-a);returnsums[k-1];}Gopackagemainimport(bufiofmtossortstrconvstrings)// 计算第 k 大的连续子数组和funcsolve(a[]int,kint)int64{n:len(a)// 计算前缀和pre:make([]int64,n1)fori:0;in;i{pre[i1]pre[i]int64(a[i])}// 枚举所有连续子数组和sums:make([]int64,0)fori:0;in;i{forj:i;jn;j{sumsappend(sums,pre[j1]-pre[i])}}// 从大到小排序sort.Slice(sums,func(i,jint)bool{returnsums[i]sums[j]})returnsums[k-1]}funcmain(){scanner:bufio.NewScanner(os.Stdin)// 读取第一行数组scanner.Scan()parts:strings.Fields(scanner.Text())a:make([]int,len(parts))fori,s:rangeparts{a[i],_strconv.Atoi(s)}// 读取 kscanner.Scan()k,_:strconv.Atoi(strings.TrimSpace(scanner.Text()))fmt.Println(solve(a,k))}C语言#includestdio.h#includestdlib.h#includestring.htypedeflonglongll;// 从大到小排序intcmp(constvoid*a,constvoid*b){ll x*(constll*)a;ll y*(constll*)b;if(xy)return-1;if(xy)return1;return0;}// 计算第 k 大的连续子数组和llsolve(inta[],intn,intk){// 计算前缀和ll pre[1005]{0};for(inti0;in;i){pre[i1]pre[i]a[i];}// 枚举所有连续子数组和ll sums[501000];intcnt0;for(inti0;in;i){for(intji;jn;j){sums[cnt]pre[j1]-pre[i];}}// 从大到小排序qsort(sums,cnt,sizeof(ll),cmp);returnsums[k-1];}intmain(){charline[20000];inta[1005];intn0;intk;// 读取第一行数组fgets(line,sizeof(line),stdin);char*tokenstrtok(line, \t\r\n);while(token!NULL){a[n]atoi(token);tokenstrtok(NULL, \t\r\n);}// 读取 kscanf(%d,k);printf(%lld\n,solve(a,n,k));return0;}
企业数字化 ERP 产品动态
相关推荐
Redis在Java开发中的高效应用与实践 1. Redis与Java开发者的不解之缘 第一次在项目中接触Redis时,我被它惊人的读写性能震撼到了——单机版轻松扛住10万QPS,比传统关系型数据库快了两个数量级。作为Java开发者,我们经常需要处理高并发场景下的缓存穿透、秒杀库存、会话共享等典型… · 2026/11/5 9:24:11
蒙特卡洛法模拟电动汽车充电负荷及其电网影响 1. 电动汽车充电负荷模拟的背景与意义 随着全球能源结构转型加速,电动汽车(EV)的普及率正在快速增长。根据国际能源署(IEA)的数据,2022年全球电动汽车销量突破1000万辆,预计到2030年将占据新车销… · 2026/11/5 9:23:11
SQL执行顺序与性能优化实战指南 1. SQL执行顺序深度解析 作为一名常年与数据库打交道的开发者,我见过太多因为不理解SQL执行顺序而导致的性能问题。今天我们就来彻底拆解这个看似简单却暗藏玄机的话题。
1.1 标准SQL查询结构 先看一个完整的SQL查询模板:
SELECT DISTINCT 列名, SUM… · 2026/11/5 9:23:11
餐饮业智能终端应用:解决春节用工荒的实践方案 1. 餐饮行业春节用工困境解析每年春节前后,餐饮行业都会面临周期性的人力资源紧张问题。根据行业观察,这种用工荒主要体现在三个维度:首先是服务人员集中返乡导致的在岗人数锐减,部分餐厅春节期间员工到岗率不足平时的60%… · 2026/11/5 9:30:17
工业级推荐系统架构设计与工程实践 1. 推荐系统架构全景解析 现代推荐系统早已超越了简单的"用户喜欢什么就推什么"的初级阶段。一个成熟的工业级推荐系统通常采用分层处理架构,就像工厂的流水线一样,每个环节各司其职又紧密配合。这种设计不仅能处理海量数据,还能在… · 2026/11/5 9:28:15
推荐系统分层架构与实战优化策略 1. 推荐系统的分层架构全景 推荐系统早已不是简单的"猜你喜欢",现代工业级推荐架构更像是一个精密运转的决策流水线。在我参与过的多个电商和内容平台项目中,分层设计是应对海量候选集和复杂业务规则的必然选择。典型的四层架构中,… · 2026/11/5 9:28:15
AiCheck文档校审工具架构解析与维护指南 1. 项目背景与现状说明AiCheck文档校审工具是我在2020年启动的一个个人开发项目,最初是为了解决自己在技术文档写作中频繁出现的拼写错误、术语不一致和格式混乱问题。这个工具通过整合多种开源校对引擎和自定义规则库,能够对Markdown、Word和LaTeX格式的… · 2026/11/5 9:28:15
分包陷阱:项目中期为何总被咬?成因与应对 1. 分包这件事,为什么总在项目中期开始咬人做过稍大一点项目的人大概都有类似的体感:项目启动会上大家意气风发,架构图画得漂漂亮亮,模块边界划得清清楚楚,等到项目推进到中段,进度开始吃紧,那些… · 2026/11/5 9:28:15
AI原生SQL工作台:DuckQuery如何重塑数据分析范式 1. 为什么一个“SQL工作台”需要冠以“AI原生”之名?你有没有过这样的经历:在某次数据探索任务中,面对一张叫user_behavior_log的表,字段名是uid,evt_type,ts,props_json——光看字段名根本猜不出props_json里到底塞了哪些键&… · 2026/11/5 9:28:15
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38