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

相关推荐
今儿敲了吗7 小时前
01|多项式输出
c++·笔记·算法
AIGCExplore7 小时前
Jenkins 全局配置及工具验证教程
java·servlet·jenkins
qq_318121597 小时前
Java大厂面试故事:Spring Boot、微服务与AI场景深度解析
java·spring boot·redis·微服务·ai·kafka·spring security
Xの哲學7 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
玛丽莲茼蒿7 小时前
javaSE 集合框架(五)——java 8新品Stream类
java·开发语言
程序员小假7 小时前
设计一个支持万人同时抢购商品的秒杀系统?
java·后端
开开心心就好7 小时前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
骥龙7 小时前
1.2下、工欲善其事:物联网安全研究环境搭建指南
python·物联网·安全
L***d6707 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
AlenTech7 小时前
200. 岛屿数量 - 力扣(LeetCode)
算法·leetcode·职场和发展