leetcode 907. 子数组的最小值之和
题目如下

数据范围

观察数据范围理论上平方复杂度的算法计算次数逼近1e9还不至于超时,但是由于有mod 1e9导致超时。所以本题不能靠暴力枚举来解决。
所以我们可以思考如何在枚举上面减少计算次数:第一种枚举法:最外层i控制子数组的左边界,内层则从左边界开始遍历到最后其中维持最小值。如此可以枚举完所有的子数组,显然超时。这种枚举法不好在忽略了一个值可能是很多子数组的最小值。例如 在数组[3,1,2,4]中子数组[3,1,2] [1,2]最小值都是1所以不方便减少计算次数。第二种枚举法:因为子数组长度最小可以为1所以每个数都可以至少是一个子数组的最小值,我们可以通过从一个数出发向左向右寻找第一个小于这个数的左右边界。我们只需要算出在这个边界能形成多少个包含i的子数组就可以得到以arr[i]为最小值的子数组的数量。(即从[l,i] [i,r]各自选1个值就行 排列组合的思想)显然也超时,但是很好利用了特性。
所以我们来思考如何减少第二种枚举法的复杂度:因为向左向右寻找的思路一样所以这里就仅说明向左寻找的思路。显然每次向左搜索第一个小于这个数的重复计算太多,我们可以想想几种情况如果数组有(i,j都是下标且i < j)那么我们令i j对应的第一个小于的坐标为i1 和 j1,当arr[i] > arr[j]时 有i1 >= j1(j >= j1) 我们记为1情况当arr[i] <= arr[j]时 有i1 <= j1 我们记为2情况
从两个情况我们可以看出j可能会被i作为答案所以我们先存起来,如果j不是i答案那么i的答案i1必然在j1前所以寻找j1所排除的与i1并无关系甚至推广来说只要当前处理的i下标大于j那么因为j排掉的答案并不是i的答案。换句话说我们处理完j以后只需要把j存起来以防万一i的答案是j就行。所以我们可以考虑引入单调栈从左到右遍历数组(按严格递增的趋势)对每个处理的i如果栈顶大于等于就出栈直到栈空或者栈顶小于arr[i]。如此便确定左边界,当然我们采用左开右开的区间方便计算(使用-1作为哨兵)。右边界同理只不过是从右往左遍历这里不多赘述。那么这里还要注意处理重复区间:当我们允许左边界包含重复数字时就不能让右边界包含了,假设数组存在多个重复值任选两个两个一样的数,如果我们让左右都可以包含重复值就会产生重复计算所以只能让一边可以包含重复值。
通过代码
class Solution {
public:int sumSubarrayMins(vector<int>& arr) {int n = arr.size(),mod = (1e9 + 7),ans = 0;vector<int> l(n),r(n);stack<int> s;for (int i = 0; i < n; i++) {while(!s.empty() && arr[s.top()] > arr[i]){s.pop();}l[i] = (s.empty())?-1:s.top();s.push(i);}s = stack<int>();for (int i = n - 1; i >= 0; i--) {while(!s.empty() && arr[s.top()] >= arr[i]){s.pop();}r[i] = (s.empty())?n:s.top();s.push(i);}for(int i = 0;i < n;i++){ans = (ans + (long long)arr[i] * (i - l[i]) * (r[i] - i)) % mod;}return ans; }};

相关文章:
leetcode 907. 子数组的最小值之和
题目如下 数据范围 观察数据范围理论上平方复杂度的算法计算次数逼近1e9还不至于超时,但是由于有mod 1e9导致超时。所以本题不能靠暴力枚举来解决。 所以我们可以思考如何在枚举上面减少计算次数:第一种枚举法:最外层i控制子数组的左边界&…...
WordPress自定义.js文件排序实现方法
在WordPress中,要将插件引用的.js文件放到所有.js文件之后加载,可以通过以下方法实现: 方法一:调整wp_enqueue_script的加载顺序 在插件的主文件中,使用wp_enqueue_script函数加载.js文件时,将$in_footer…...
摄像头模块烟火检测
工作原理 基于图像处理技术:分析视频图像中像素的颜色、纹理、形状等特征。火焰通常具有独特的颜色特征,如红色、橙色等,且边缘呈现不规则形状,还会有闪烁、跳动等动态特征;烟雾则表现为模糊、无固定形状,…...
【拼十字——树状数组】
题目 暴力代码 30% #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e5 10; const int mod 1e9 7; int n; int l[N], w[N], c[N]; int main() {cin >> n;ll ans 0;for (int i 1; i < n; i){cin >> l[i] >> …...
脚手架开发【实战教程】prompts + fs-extra
创建项目 新建文件夹 mycli_demo 在文件夹 mycli_demo 内新建文件 package.json {"name": "mycli_demo","version": "1.0.0","bin": {"mycli": "index.js"},"author": "","l…...
Fiddler Classic(HTTP流量代理+半汉化)
目录 一、关于Fiddler (一) Fiddler Classic (二) Fiddler Everywhere (三) Fiddler Everywhere Reporter (四) FiddlerCore (五) 总结 二、 软件安全性 1. 软件安装包 2. 软件汉化dll 三、安装与半汉化 1. 正常打开安装包点击下一步安装即可,安装路径自…...
基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具,旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病,通常表现为认知障碍、记忆丧失和语言障碍等症状…...
玩转Docker | 使用Docker部署httpd服务
玩转Docker | 使用Docker部署httpd服务 前言一、准备工作环境确认检查操作系统准备网站目录和配置文件二、拉取httpd镜像三、运行httpd容器运行容器命令检查容器状态四、验证httpd服务浏览器访问测试错误排查五、容器管理与维护查看容器状态停止和启动容器更新网站内容和配置六…...
力扣1022. 从根到叶的二进制数之和(二叉树的遍历思想解决)
Problem: 1022. 从根到叶的二进制数之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 1.在先序遍历的过程中,用一个变量path记录并更新其经过的路径上的值,当遇到根节点时再将其加到结果值res上; 2.该题…...
排序算法--基数排序
核心思想是按位排序(低位到高位)。适用于定长的整数或字符串,如例如:手机号、身份证号排序。按数据的每一位从低位到高位(或相反)依次排序,每次排序使用稳定的算法(如计数排序&#…...
【AIGC魔童】DeepSeek核心创新技术(二):MLA
【AIGC魔童】DeepSeek核心创新技术(二):MLA 1. MLA框架的定义与背景2. MLA框架的技术原理(1)低秩联合压缩(2)查询的低秩压缩(3)旋转位置嵌入(RoPE)…...
Mac: docker安装以后报错Command not found: docker
文章目录 前言解决办法(新的)解决步骤(原来的)不推荐总结 前言 本操作参考 http://blog.csdn.net/enhenglhm/article/details/137955756 原作者,更详细请,查看详细内容请关注原作者。 一般,…...
Golang 并发机制-7:sync.Once实战应用指南
Go的并发模型是其突出的特性之一,但强大的功能也带来了巨大的责任。sync.Once是由Go的sync包提供的同步原语。它的目的是确保一段代码只执行一次,而不管有多少协程试图执行它。这听起来可能很简单,但它改变了并发环境中管理一次性操作的规则。…...
react关于手搓antd pro面包屑的经验(写的不好请见谅)
我们先上代码,代码里面都有注释,我是单独写了一个组件,方便使用,在其他页面引入就行了 还使用了官方的Breadcrumb组件 import React, { useEffect, useState } from react; import { Breadcrumb, Button } from antd; import { …...
Android修行手册-五种比较图片相似或相同
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材…...
设计模式.
设计模式 一、介绍二、六大原则1、单一职责原则(Single Responsibility Principle, SRP)2、开闭原则(Open-Closed Principle, OCP)3、里氏替换原则(Liskov Substitution Principle, LSP)4、接口隔离原则&am…...
使用PyCharm创建项目以及如何注释代码
创建好项目后会出现如下图所示的画面,我们可以通过在项目文件夹上点击鼠标右键,选择“New”菜单下的“Python File”来创建一个 Python 文件,在给文件命名时建议使用英文字母和下划线的组合,创建好的 Python 文件会自动打开&#…...
LabVIEW与PLC交互
一、写法 写命令立即读出 写命令后立即读出,在同一时间不能有多个地方写入,因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI,轮询PLC指令 在锁内耗时,就是TCP读写的实际耗时为5-8ms,在主VI六个…...
Idea 2024.3 使用CodeGPT插件整合Deepseek
哈喽,大家好,我是浮云,最近国产大模型Deepseek异常火爆,作为程序员我也试着玩了一下,首先作为简单的使用,大家进入官网,点击开始对话即可进行简单的聊天使用,点击获取手机app即可安装…...
[论文笔记] Deepseek-R1R1-zero技术报告阅读
启发: 1、SFT&RL的训练数据使用CoT输出的格式,先思考再回答,大大提升模型的数学与推理能力。 2、RL训练使用群体相对策略优化(GRPO),奖励模型是规则驱动,准确性奖励和格式化奖励。 1. 总体概述 背景与目标 报告聚焦于利用强化学习(RL)提升大型语言模型(LLMs)…...
Pearcleaner终极指南:5步实现Mac应用彻底卸载,释放宝贵存储空间
Pearcleaner终极指南:5步实现Mac应用彻底卸载,释放宝贵存储空间 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 还在为Mac存储空间不…...
Asp.net Mvc教学:LINQ to Objects和 LINQ to Entities的经典案例-由Deepseek产生
下面分别给出 LINQ to Objects(操作内存集合)和 LINQ to Entities(通过 EF Core 操作数据库)的 4 个典型案例。案例使用 C# 编写,并附带简要说明。一、LINQ to Objects(4 个案例) 适用于 List&l…...
暗黑破坏神2角色编辑器:5分钟打造完美角色的终极指南
暗黑破坏神2角色编辑器:5分钟打造完美角色的终极指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中漫长的练级过程而苦恼?想要快速测试不同职业的bui…...
ARM GICv3虚拟化中断机制与优化实践
1. GICv3虚拟化中断处理机制概述在ARM虚拟化架构中,通用中断控制器(GIC)扮演着关键角色。GICv3作为第三代架构,引入了全面的虚拟化支持,使得虚拟机能够高效处理中断而无需Hypervisor的频繁介入。其核心设计理念是通过虚拟CPU接口(vCPU Interf…...
声音与视觉环境优化:提升工程师与知识工作者生产力的科学方法
1. 项目概述:声音与视觉如何重塑我们的生产力你有没有过这样的体验:在图书馆的绝对安静里,反而一个字也写不出来;但在咖啡馆那恰到好处的嘈杂声中,思绪却如泉涌?或者,当你戴上耳机,播…...
从服务端到登录器:《传奇世界》单机架设全流程拆解与工具选择指南(AFT/彩虹/凤凰引擎对比)
从服务端到登录器:《传奇世界》单机架设全流程拆解与工具选择指南 在经典网游《传奇世界》的爱好者圈子里,单机架设一直是技术玩家热衷探索的领域。不同于简单的游戏体验,搭建一个完整的单机环境意味着对游戏架构的深度理解和技术掌控。本文将…...
Zotero PDF Translate:打破语言壁垒,让外文文献阅读更高效 [特殊字符]
Zotero PDF Translate:打破语言壁垒,让外文文献阅读更高效 🚀 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: ht…...
GPT-5级能力提前落地,ChatGPT 2026新增9大生产级功能,含RAG++动态知识图谱、零样本工作流编排、联邦学习微调接口——错过本轮升级将落后至少18个月
更多请点击: https://intelliparadigm.com 第一章:GPT-5级能力提前落地的技术本质与产业影响 当前,所谓“GPT-5级能力”并非依赖单一巨型模型发布,而是通过模型蒸馏、多专家协同推理(MoE)、实时知识注入与…...
基于C语言实现(控制台)小型文件系统
♻️ 资源 大小: 3.40MB ➡️ 资源下载:https://download.csdn.net/download/s1t16/87430288 小型文件系统 一、需求分析 1.1 小型文件系统介绍 科技的进步已将人类带入了信息大爆炸的时代,随着计算机科学技术的不断发展,计算…...
Claude Markdown增强资源库:提升AI文档生成质量与效率
1. 项目概述:为什么我们需要一个“Claude Markdown 增强”资源库? 如果你和我一样,是 Claude 的深度用户,并且经常用它来辅助编程、撰写文档或整理知识,那你一定遇到过这个痛点:Claude 输出的 Markdown 代…...
