大厂真题:【前缀和】米哈游2023秋招-米小游的极差之和

题目描述与示例

题目描述

米小游拿到了一个数组a,她用这个数组构造一个新数组b,其中ai代表b数组中有aii

例如,若a = [2,3,1],那么b = [1,1,2,2,2,3],因为a1=2,代表b 数组中有21a2=3,代表b数组中有32a3 = 1,代表b数组中有13

现在给定a数组,你需要帮米小游求出b数组中所有连续子数组的极差之和。由于答案可能过大,请对10^9+7 取模。

数组的极差指最大值减去最小值。

输入描述

第一行输入一个正整数n,代表a数组的元素数量。

第二行输入n 个正整数ai,代表a数组的元素。

复制代码
1 ≤ n ≤ 10^5
1 ≤ ai ≤ 10^9

输出描述

一个整数,代表数组中所有区间的极差之和,对10^9+7取模的值。

示例

输入

Plain 复制代码
2
2 1

输出

Plain 复制代码
2

说明

a=[2,1]时,b数组为[1,1,2]。

此时b数组共有6个连续子数组:

1\]的极差为0。 \[1\]的极差为0。 \[2\]的极差为0。 \[1,1\]的极差为0。 \[1,2\]的极差为1。 \[1,1,2\]的极差为1。 因此答案是0+0+0+0+1+1=2。 ## 解题思路 根据数据范围大小,显然不能将`a`数组展开回`b`数组求解,而应该直接从`a`数组出发解决问题。 注意到`b`数组实际上是一个单调非递减数组,其子数组也一定单调非递减数组。当子数组的最大值和最小值不相等(即最后一个元素和第一个元素)时,该子数组才对极差有贡献。 对于任意的两元组 ( i , j ) (i, j) (i,j)满足 1 \< = i \< j \< = n 1 \<= i \< j \<= n 1\<=i\ #include #include using namespace std; int main() { int n; cin >> n; vector a_list(n); const int MOD = 1000000007; long long ans = 0; for (int i = 0; i < n; i++) { cin >> a_list[i]; } vector p_list(n + 1, 0); vector q_list(n + 1, 0); for (int i = 1; i <= n; i++) { p_list[i] = p_list[i - 1] + static_cast(i) * a_list[i - 1]; q_list[i] = q_list[i - 1] + a_list[i - 1]; } long long pn = p_list[n]; long long qn = q_list[n]; for (int i = 1; i <= n; i++) { ans += static_cast(a_list[i - 1]) * (pn - p_list[i] - (qn - q_list[i]) * i); ans %= MOD; } cout << ans << endl; return 0; } ``` ### 时空复杂度 时间复杂度:`O(N)`。化简后,仅需一次遍历数组。 空间复杂度:`O(N)`。两个后缀和数组所占用空间。 ## 华为OD算法/大厂面试高频题算法练习冲刺训练 * **华为OD算法/大厂面试高频题算法冲刺训练**目前开始常态化报名!目前已服务100+同学成功上岸! * 课程讲师为全网50w+粉丝编程博主@**吴师兄学算法** 以及小红书头部编程博主@**闭着眼睛学数理化** * 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果! * 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁 * 可上全网独家的[欧弟OJ系统](https://oj.algomooc.com/)练习华子OD、大厂真题 * 可查看链接 [OD算法冲刺训练课程表](https://r07na4yqwor.feishu.cn/docx/I0Ued47QAojP1ax1dn5cRFZBnCd) \& [OD真题汇总(持续更新)](https://og7kl7g6h8.feishu.cn/docx/Vmu8dqCQYoOzmExswVpc97gknRh) * 绿色聊天软件戳 `od1336`了解更多

相关推荐
云烟成雨TD13 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Csvn13 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
小O的算法实验室13 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
于慨13 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132113 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald13 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川13 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
‎ദ്ദിᵔ.˛.ᵔ₎13 小时前
LIST 的相关知识
数据结构·list
一轮弯弯的明月13 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66613 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter