力扣907.子数组的最小值之和

力扣907.子数组的最小值之和

  • 考虑每个数对答案的贡献

    • 对于每个元素 找到左边界(严格小于)
      • 右边界(小于等于)
    • 这样出现重复元素也不会重复计算答案
    • 对于答案贡献为 arri * (i - l) * (r - i)
cpp 复制代码
  class Solution {
      const int MOD = 1e9+7;
  public:
      int sumSubarrayMins(vector<int>& arr) {
          int n = arr.size();
          vector<int> l(n,-1),r(n,n);
          stack<int> st;
          for(int i=0;i<n;i++)
          {
              while(!st.empty() && arr[st.top()] >= arr[i]) st.pop();
              if(!st.empty()) l[i] = st.top();
              st.push(i);
          }
  
          st = stack<int>();
          for(int i=n-1;i>=0;i--)
          {
              while(!st.empty() && arr[st.top()] > arr[i]) st.pop();
              if(!st.empty()) r[i] = st.top();
              st.push(i);
          }
  
          long res=0L;
          for(int i=0;i<n;i++)
          {
              res += (long)arr[i] * (i - l[i]) * (r[i] - i);
          }
          return res % MOD;
      }
  };
相关推荐
lsswear13 分钟前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
小坏讲微服务42 分钟前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
kunicoding1 小时前
多线程编程核心概念详解:从线程基础到并发安全
java·jvm·安全
snow@li1 小时前
SpringBoot:核心注解全景梳理 / @xxx 叫“注解”(Annotation)
java·spring
devilnumber1 小时前
避坑_IDEA 提取方法(Extract Method)工具
java·ide·intellij-idea
鬼手点金2 小时前
Agent 的学习机制:后训练、上下文学习与外部化学习
java·人工智能·git·学习·自动化·nanogpt
小陈不好吃2 小时前
equals 与 hashCode 的契约关系:从 HashMap 到 Lombok 注解
java·hashmap·lombok
Data analyse4562 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai2 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
打工仔折腾 AI2 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战