2026华为OD机考新系统真题|获取利润第K大的值(2026.11.01)

2026华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ 华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C++实现。 阅读详情

获取利润第K大的值(2026.11.01)

2026年最新华为OD机考题库(按考点分类): 2026年最新华为OD机考题库

题目描述

小张是一名金融交易员,现在记录了某只股票连续 n 个交易日每天的“涨跌金额”(上涨为正、下跌为负、横盘为 0);如果某次交易是“在某个交易日买入、之后某个交易日卖出”,那么这笔交易的利润就等于这两个交易日之间(含买入日与卖出日)所有日子的涨跌金额之和。

小张正在设计一个交易策略,想找出所有可行交易时段里,利润排名第 K 大的那个利润值,以此观察收益分布。

请你设计一个程序,帮小张求出这个第 K 大的交易利润值。

注意:

  • 一次交易为「买入日 i → 卖出日 j(0≤i≤j≤n−1)」,利润 =a[i]+a[i+1]+⋯+a[j];
  • 只要买入日 / 卖出日不同就视为不同交易时段;利润相同的不同时段也分别计入排名(并列依次占用排名);
  • 数组可包含负数,因此利润可正、可负、可为 0,均按排名取第 K 大的值。

输入描述

输入一行,格式为 [a0, a1, ..., a(n-1)],K:先是一个方括号包裹、逗号分隔的整数数组 a,方括号后紧跟一个半角逗号,再给出整数 K。逗号之后可能带有任意空白。对应核心代码模式的两个参数:数组 a 与整数 K。

输出描述

输出一个整数,表示所有连续子数组和按从大到小排序后的第 K 大值(相同值并列各占一个名次)。答案在 64 位整数范围内。

样例

用例输入 1

[3, -2, 5],3

用例输出 1

3

用例解释 1

所有可行交易利润为 [3]=3、[-2]=-2、[5]=5、[3,-2]=1、[-2,5]=3、[3,-2,5]=6,按从大到小为 6, 5, 3, 3, 1, -2;重复的 3 各占一位,从大到小第 3 大为 3。

用例输入 2

[1, 2, 3],1

用例输出 2

6

用例解释 2

利润最大的一段就是整个记录 1+2+3=6,即第 1 大为 6。

用例输入 3

[-5, -2, -1, -3],2

用例输出 3

-2

用例解释 3

全部交易利润从大到小为 -1, -2, -3, -3, -4, -5, -6, -7, -8, -11,第 2 大为 -2(即便全是亏损,也照样按排名取值)。

来源

本题来源于网络、非官方材料、仅供学习交流,侵删




🧠 解题思路

第一步:把题目翻译成一句话

第 i 天买入、第 j 天卖出(i ≤ j)的利润,就是数组从下标 i 到下标 j 这一段连续元素的和 a[i] + a[i+1] + ... + a[j]。题目要找所有这样的连续子数组和里,从大到小排第 K 个的值(相同的值并列各占一个名次)。

第二步:数据范围够小,直接枚举所有区间和

n ≤ 1000,一共有多少个交易时段?起点 i 有 n 种,终点 j ≥ i,总共 n(n + 1) / 2 个,最多 1000 × 1001 / 2 = 500,500 个(约 50 万个)。50 万个数全部算出来再排个序,计算机几十毫秒就能跑完,完全不需要复杂算法。

如果三层循环(枚举 i、枚举 j、再从 i 加到 j)会达到 O(n³) ≈ 1.6×10⁸ 次,偏慢。其实固定买入日 i 后,卖出日 j 从 i 往右一格一格挪时,只要在上一个利润的基础上顺手加上 a[j],就能 O(1) 得到新利润,两层循环 O(n²) 就把所有利润都算出来了。

第三步:排序取第 K 大

把所有区间和放进一个列表,从大到小排序,下标 K - 1 处的值就是第 K 大。因为没有去重,相同的利润在列表里会挨在一起各占一个位置,天然符合“并列依次占用排名”的要求。

注意:单日涨跌可能很大,累加出来的利润可能超过 32 位整数范围(约 2×10⁹),在 C++ / Java 中要用 64 位整数(long long / long)保存利润。

用样例 1 走一遍

a = [3, -2, 5],K = 3。

买入日 i卖出日 j 依次往右累加得到的利润
0j=0: 3;j=1: 3 + (-2) = 1;j=2: 1 + 5 = 63, 1, 6
1j=1: -2;j=2: -2 + 5 = 3-2, 3
2j=2: 55

共 6 个利润:[3, 1, 6, -2, 3, 5]。从大到小排序为 [6, 5, 3, 3, 1, -2],两个 3 各占第 3、第 4 名,第 3 大(下标 2)是 3,输出 3。

样例 3:[-5, -2, -1, -3],K = 2。全部是负数时利润也都是负数,共 10 个区间和,最大的是 [-1](-1),第二大的是 [-2](-2),输出 -2。

⚠️ 易错点

  • 利润可能超过 32 位整数范围,累加变量和存利润的数组要用 64 位整数(long / long long),用 int 会溢出。
  • 相同利润的不同时段要分别保留,不能用集合去重。
  • K 是从 1 开始的名次,降序排序后取下标 K - 1。
  • 利润可以为负数(如全跌的行情),累加初值要从 0 开始,但不能把 0(不交易)放进候选列表。
  • JavaScript 数组的 sort() 不传比较函数时按字符串比较,要传入比较函数。

⏱️ 复杂度

时间复杂度:O(n² log n),共 n(n + 1) / 2 ≤ 500,500 个区间和。
空间复杂度:O(n²),存下全部区间和,n = 1000 时约 50 万个 64 位整数。

💻 参考代码(Java)

import java.util.Arrays;

class Solution {
    public long getKthLargestProfit(int[] a, int k) {
        int n = a.length;
        long[] sums = new long[n * (n + 1) / 2];
        int idx = 0;
        for (int i = 0; i < n; i++) {
            long s = 0;  // 利润最大约 10^12,必须用 long
            for (int j = i; j < n; j++) {
                s += a[j];  // 第 i 天买入、第 j 天卖出的利润
                sums[idx++] = s;
            }
        }
        // 升序排序后,第 k 大在倒数第 k 位(相同利润各占一个名次)
        Arrays.sort(sums);
        return sums[sums.length - k];
    }
}

💻 参考代码(C++)

class Solution {
public:
    long long getKthLargestProfit(vector<int>& a, int k) {
        int n = a.size();
        vector<long long> sums;
        sums.reserve((long long)n * (n + 1) / 2);
        for (int i = 0; i < n; i++) {
            long long s = 0;  // 利润最大约 10^12,必须用 long long
            for (int j = i; j < n; j++) {
                s += a[j];  // 第 i 天买入、第 j 天卖出的利润
                sums.push_back(s);
            }
        }
        // 从大到小排序,第 k 大在下标 k-1(相同利润各占一个名次)
        sort(sums.begin(), sums.end(), greater<long long>());
        return sums[k - 1];
    }
};

💻 参考代码(Python)

from itertools import accumulate


class Solution:
    def getKthLargestProfit(self, a, k):
        sums = []
        for i in range(len(a)):
            # a[i:] 的前缀和依次是:第 i 天买入、第 i, i+1, ... 天卖出的利润
            sums.extend(accumulate(a[i:]))
        # 从大到小排序,第 k 大在下标 k-1(相同利润各占一个名次)
        sums.sort(reverse=True)
        return sums[k - 1]

💻 参考代码(JavaScript)

class Solution {
    getKthLargestProfit(a, k) {
        const n = a.length;
        const sums = [];
        for (let i = 0; i < n; i++) {
            let s = 0;  // 利润绝对值不超过 10^12,在 JS 能精确表示的整数范围内
            for (let j = i; j < n; j++) {
                s += a[j];  // 第 i 天买入、第 j 天卖出的利润
                sums.push(s);
            }
        }
        // 必须传比较函数,否则会按字符串排序;从大到小排,第 k 大在下标 k-1
        sums.sort((x, y) => y - x);
        return sums[k - 1];
    }
}

module.exports = { Solution };
2026华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ 华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Python实现。 阅读详情

相关推荐

2026华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,JavaScript实现。

MISAYAONE的博客 8万+

2026华为OD机考新系统真题|整理学生编号(2026.11.01)

根据题目要求,对输入的学生编号进行合法性校验与规范化处理:仅保留符合5项规则的编号(仅含数字、字母、空格,去空格后长度1-6,且仅1个字母,其余为非全零数字);将合法编号统一转为“1大写字母+5位数字”格式,并按出现顺序累计重复次数,每次在数字部分加k×10000(k从0开始),若结果超99999则丢弃;最终保留结果按字典序排序输出。

be_Newcode的博客 325

2026华为OD机试(JAVA&Go)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Java实现。

MISAYAONE的博客 34万+

Scrum 敏捷框架完全指南

形式化的质量检查清单,只有满足 DoD 的增量才能交付。

Cat_fish_snow的博客 424

2026华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C语言实现。

MISAYAONE的博客 11万+

华为OD机考双机位C卷 - 微服务的集成测试 (Java)

华为OD机考双机位C卷 - 微服务的集成测试 (Java), 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 36

2.7.1 希尔排序及java实现

希尔排序(Shell Sort)是插入排序的一种高效改进版本,也称为。

橘子hhh 188

Proteus下载安装快速入门:30分钟掌握全过程

手把手教你完成proteus下载安装,从环境配置到首次运行一气呵成,适合电子设计新手快速掌握仿真工具的核心操作步骤。

weixin_31974443的博客 894

数据结构:时间复杂度和空间复杂度

若存在正常数 c 和 n₀,使得当 n ≥ n₀ 时,

橘为己有的博客 516

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 407

ks-快手滑块验证码-Js逆向

本文分析了快手滑块验证码的破解过程。首先通过抓包找到验证码背景图接口,发现需要动态获取captchaSession参数。然后深入分析验证流程,发现verifyParam参数被加密处理,需要追踪其生成逻辑。文章详细解析了加密参数c的构成,包括captchaSn、滑动距离、轨迹信息等,并指出轨迹验证较为严格。最后通过对比浏览器和本地生成的加密值,确认加密逻辑正确,但指出轨迹生成仍需优化。作者建议参考相关文章深入分析轨迹逻辑,并提供了验证成功的截图作为参考。

2302_76420666的博客 1879

常用排序算法

排序

x13262608581的博客 157

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1566

二叉树余题,排序、直接插入排序、希尔排序

【代码】二叉树余题,排序、直接插入排序、希尔排序。

2302_78369255的博客 174

2026 年 AI 大模型资讯深度研究报告 / 2026 年 3 月 11 日

2026 年已成为 AI 大模型发展的关键拐点年。从 2023 年 ChatGPT 开启的技术奇点,历经多模态突破、推理能力崛起,至 2025 年形成产业爆发态势,AI 大模型正从"技术验证期"迈向"产业落地期"。核心发现技术突破: OpenAI 于 2026 年 3 月 6 日发布 GPT-5.4,首次实现原生计算机操控能力,在 OSWorld 桌面操控测试中以 75% 成功率超越人类 (72.4%),标志着 AI 从"对话工具"向"自主数字员工"的时代跃迁市场格局。

AI天才研究院 790

PCL RANSAC拟合直线并插值

空间直线线性插值的原理与实现方法。

点云侠的博客 137

排序算法详解:归并排序、堆排序与快速排序

归并排序:先拆分,再合并。合并时需要额外的辅助数组。快速排序:先划分,再递归处理左右区间。通常可以在原数组上完成排序。虽然单次堆调整最坏为 O(logn),但不同节点的调整高度不同:大部分节点位于树的底部,调整次数很少。只有少数节点位于树的顶部,可能需要较多调整。因此所有节点调整的总工作量为 O(n)。

zengjiajun2006的博客 724

5G 模组 FM650 USB模式查询及网络配置

完成以上配置后,5G模组可进行搜网,入网成功后,上位机获取 5G IP。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1325

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 604

南方电网专业面试题(电气类-继电保护)(目录)

南方电网专业面试题(电气类-继电保护)(目录) 这些面试题围绕继电保护的基本概念、工作原理、分类、性能要求,以及变压器、断路器、母线保护、自动重合闸等电力系统关键设备的保护机制和操作原则展开,旨在评估应聘者对电力系统保护和控制策略的深入理解和实际应用能力。

weixin_44808274的博客 2161

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序

【代码】直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序。

2302_78369255的博客 180

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

排序算法通俗详解

把一堆杂乱的数据,按某个「关键字」重新排成有序(从小到大或从大到小)的序列。注意,排序的对象往往不是一组单纯的数字,而是「结构体」里的某个成员。int stuNo;// 学号// 姓名int age;// 年龄// 成绩} Student;我们可以按score排,也可以按age排——这个被用来比较的成员,就叫关键字(key)。生活里排序无处不在:购物 App 按价格/销量/评分排商品、大学排行榜、富豪榜……本质都是排序。排序这一章,思想 > 代码 > 复杂度结论。

2501_93853322的博客 229

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

排序算法深度笔记(上):比较类排序的思想演进与代码实现

与。本文聚焦前者 —— 也就是通过元素间两两比较来确定相对顺序的排序算法,从最朴素的 O (n²) 基础排序,到工业级主流的 O (nlogn) 进阶排序,逐层拆解设计思想、带注释的代码实现与边界细节。当我们理解了比较排序的性能边界,也就自然引出了非比较排序的存在意义。所有代码均遵循统一的实现规范:入口函数前置空数组与单元素边界校验,基于数组原地修改,主函数附带可直接运行的测试用例,与练习代码风格完全对齐。

2401_87069538的博客 635

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

a bit 213

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 313

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 731
上一篇: 2026华为OD机考新系统真题|整理学生编号(2026.11.01)
下一篇: 2026华为OD机考新系统真题|山区救援路线规划(2026.11.01)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值