当前位置:网站首页>【Leetcode】2104. Sum of Subarray Ranges
【Leetcode】2104. Sum of Subarray Ranges
2022-08-09 22:01:00 【记录算法题解】
题目地址:
https://leetcode.com/problems/sum-of-subarray-ranges/
给定一个长 n n n数组 A A A,求 ∑ l ≤ r ( max A [ l : r ] − min A [ l : r ] ) \sum_{l\le r}(\max A[l:r]-\min A[l:r]) ∑l≤r(maxA[l:r]−minA[l:r])。
参考https://blog.csdn.net/qq_46105170/article/details/109734115。代码如下:
class Solution {
public:
using LL = long long;
LL subArrayRanges(vector<int>& nums) {
auto less = [](int& x, int& y) {
return x <= y; };
auto more = [](int& x, int& y) {
return x >= y; };
return calc(nums, more) - calc(nums, less);
}
LL calc(vector<int>& v, bool (*comp)(int&, int&)) {
stack<int> stk;
LL res = 0;
for (int i = 0; i < v.size(); i++) {
while (stk.size() && comp(v[i], v[stk.top()])) {
int idx = stk.top(); stk.pop();
int l = idx - (stk.size() ? stk.top() : -1), r = i - idx;
res += (LL)v[idx] * l * r;
}
stk.push(i);
}
while (stk.size()) {
int idx = stk.top(); stk.pop();
int l = idx - (stk.size() ? stk.top() : -1), r = v.size() - idx;
res += (LL)v[idx] * l * r;
}
return res;
}
};
时空复杂度 O ( n ) O(n) O(n)。
边栏推荐
猜你喜欢
随机推荐
three.js镂空圆球拖拽变形js特效
重装系统后新建文本文档打不开怎么办
为什么这么多人都想当产品经理?
Interviewer: How to deal with Redis big key?
How do task flow executors work?
Under the NVM node installation;The node environment variable configuration
js array object deduplication
发送激活邮件「建议收藏」
Leetcode.25 K个一组翻转链表(模拟/递归)
Liver all night to write a thirty thousand - word all the commands the SQL database, function, speaks clearly explain operators, content is rich, proposal collection + 3 even high praise!
pip 离线到内网安装包
Tencent continues to wield the "big knife" to reduce costs and increase efficiency, and free catering benefits for outsourced employees have been cut
typedef和#define的花里胡哨的用法
CGLIB源码易懂解析
js十五道面试题(含答案)
Easyui 表单验证「建议收藏」
MySQL——JDBC
Redis
Xiaohei leetcode's refreshing rainy day trip, just finished eating Yufei Beef Noodles, Mala Tang and Beer: 112. Path Sum
[Microservice~Nacos] Configuration Center of Nacos









