2023-11-27 LeetCode每日一题(子数组的最小值之和)

2023-11-27每日一题

一、题目编号

复制代码
907. 子数组的最小值之和

二、题目链接

点击跳转到题目位置

三、题目描述

给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。

由于答案可能很大,因此 返回答案模 109 + 7

示例 1:

示例 2:

提示:

  • 1 <= arr.length <= 3 * 104
  • 1 <= arr[i] <= 3 * 104

四、解题代码

cpp 复制代码
class Solution {
public:
    int sumSubarrayMins(vector<int>& arr) {
        int n = arr.size();
        long long ans = 0;
        long long mod = 1e9 + 7;
        stack<int> monoStack;
        vector<int> dp(n);
        for (int i = 0; i < n; i++) {
            while (!monoStack.empty() && arr[monoStack.top()] > arr[i]) {
                monoStack.pop();
            }
            int k = monoStack.empty() ? (i + 1) : (i - monoStack.top());
            dp[i] = k * arr[i] + (monoStack.empty() ? 0 : dp[i - k]);
            ans = (ans + dp[i]) % mod;
            monoStack.emplace(i);
        }
        return ans;
    }
};

五、解题思路

(1) 动态规划。

相关推荐
Alsn8632 分钟前
29.Java中常见加解密算法的基本实现
java·开发语言·算法
1001101_QIA34 分钟前
OpenMP学习笔记
算法
Coovally AI模型快速验证38 分钟前
YOLO11算法深度解析:四大工业场景实战,开源数据集助力AI质检落地
人工智能·神经网络·算法·计算机视觉·无人机
(❁´◡`❁)Jimmy(❁´◡`❁)41 分钟前
【算法】 二分图理论知识和判断方法
c++·算法
徐子童1 小时前
优选算法---哈希表
数据结构·算法·哈希表
疑惑的杰瑞1 小时前
掌握 C 语言流程控制:分支、循环、goto 与表达式求值详解
c语言·开发语言·算法·算术转换
im_AMBER1 小时前
Leetcode 85 【滑动窗口(不定长)】最多 K 个重复元素的最长子数组
c++·笔记·学习·算法·leetcode·哈希算法
B_lack0261 小时前
字节转换算法应用_读取本地时间
数据结构·算法·数组·西门子plc·博途·时间处理·scl
leiming61 小时前
c++ string 容器
开发语言·c++·算法
wljun7392 小时前
六、OrcaSlicer 切片之区域
算法·切片软件 orcaslicer