大厂真题:【前缀和】米哈游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 小时前
计算机基础知识(第五篇)
java·开发语言·分布式
BillKu1 小时前
Java严格模式withResolverStyle解析日期错误及解决方案
java
飞川撸码1 小时前
【LeetCode 热题100】网格路径类 DP 系列题:不同路径 & 最小路径和(力扣62 / 64 )(Go语言版)
算法·leetcode·golang·动态规划
网安INF1 小时前
ElGamal加密算法:离散对数难题的安全基石
java·网络安全·密码学
Neil今天也要学习1 小时前
永磁同步电机参数辨识算法--IPMSM拓展卡尔曼滤波全参数辨识
单片机·嵌入式硬件·算法
yzx9910132 小时前
基于 Q-Learning 算法和 CNN 的强化学习实现方案
人工智能·算法·cnn
AWS官方合作商2 小时前
在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
java·云原生·aws
亮亮爱刷题2 小时前
算法练习-回溯
算法
gadiaola3 小时前
【JVM】Java虚拟机(二)——垃圾回收
java·jvm
眼镜哥(with glasses)3 小时前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯