大厂真题:【前缀和】米哈游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`了解更多

相关推荐
冷雨夜中漫步1 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴2 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再2 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
颜酱3 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919103 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878383 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
喵手3 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934733 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python