力扣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;
      }
  };
相关推荐
Wang's Blog2 分钟前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
老木避暑研究所7 分钟前
从原始数据到洞察:一次完整的避暑房环境数据采集、清洗与可视化分析
java·开发语言
怪奇云呼军11 分钟前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
Nil20818 分钟前
leetcode 416分割等和子集
算法·leetcode·职场和发展
云淡风轻~窗明几净19 分钟前
角谷猜想的进展之三 移动了群山/沸騰的群山 2026-10-10
人工智能·算法·dubbo·图论
前端 贾公子32 分钟前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库
huaweichenai38 分钟前
spring boot 实现file文件上传
java·spring boot·后端
ForeverYang201539 分钟前
一种无需训练缺陷数据生成算法--O2MAG
人工智能·深度学习·算法
VX_bysjlw9851 小时前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
荣码1 小时前
从0到1搭一个生产级RAG系统:串联前面21篇所有知识
java·python